簡體   English   中英

SQL查詢,子查詢

[英]SQL query, sub queries

我有一個表,用於存儲一系列事件的體育比賽結果: ONS_Skippers該表中與該問題相關的FK_EventIDFK_EventIDFK_SkipperIDintResult

我正在從該數據庫中提供不同的統計信息,但是我沒有成功生成最高級的查詢:我想列出每個參與者的平均表現( FK_SkipperID )。 我將事件獲勝的性能定義為100%,將事件中的最后一位定義為0%,並將兩個范圍之間的線性曲線的性能定義為。 公式為:

Performance = 100*(1-(intResult-1)/(NumberOfParticipantsInTheEvent-1))

NumberOfParticipantsInTheEvent因每個事件而異,因此需要從FK_EventID每個組中進行計數。 到目前為止,我所有的嘗試都失敗了:

例:

SELECT FK_SkipperID, AVG((1-(intResult-1.0)/((SELECT Count(FK_EventID)
FROM ONS_Skippers AS ONS_Skippers2
WHERE ONS_Skippers.FK_EventID = ONS_Skippers2.FK_EventID AND FK_SkipperID > 0
GROUP BY FK_EventID)-1))*100)
FROM ONS_Skippers
GROUP BY FK_SkipperID

這給出了錯誤消息“無法對包含聚合或子查詢的表達式執行聚合功能”。

關於如何產生所需輸出的任何想法嗎?

嘗試加入子查詢:

SELECT 
    FK_SkipperID, 
    AVG((1-(intResult-1.0)/(e.events-1))*100)
FROM ONS_Skippers o
INNER JOIN
(
    SELECT Count(FK_EventID) AS events
    FROM ONS_Skippers AS ONS_Skippers2
    WHERE FK_SkipperID > 0
    GROUP BY FK_EventID
) e
ON o.FK_EventID = e.FK_EventID
GROUP BY FK_SkipperID

我認為您可以通過按如下方式加入內聯表來實現此目標...

select SkipperID, 
       AVG(100*(1-(Result-1)/(p.NumParticipants-1))) as Performance
  from Spike.Skippers s
 inner join (
                select EventId, Count(EventId) as NumParticipants -- Or Max(Result)
                  from Spike.Skippers
                  group by EventID
             ) p on s.EventID = p.EventID
 group by SkipperID

抱歉,您未遵守您的列命名約定-我的OCD堅持我遵守自己的個人標准。 挑剔,我知道。 [/編輯]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM