2013-01-24 126 views
-4

我需要找到排名前5的球員,其中總數最多的是ASTSQL查詢 - 總結並獲得前5名的結果

期望的結果:

PlayerID Sum(AST) 
3   10 
1   6 
2   5 

我的兩個表:

tblPlayers 
PlayerID 
1 
2 
3 
4 
5 


tblIndStats 
GameID PlayerID AST 
1  2  2 
2  2  4 
3  3  5 
4  3  5 
+2

你正在使用哪些DBMS? Oracle,Sql Server? – gustavodidomenico

+3

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)Stackoverflow是一個問答網站,而不是免費的代碼寫作服務。 – GarethD

+1

詢問查詢級別問題時指定DBMS – Cris

回答

-1

(頂部類型的構造可能是特定數據庫)

select playerID, sum(AST) 
from tblIndStats 
group by playerID 
order by sum(AST) desc 

你不顯示任何其他來自tblPlayers的列,所以不知道你想從那張表中得到什麼。

+1

這不是一個答案 – Cris

+3

@Cris:它肯定是一個答案,但它絕對不是解決方案。 ;) –

0

甲骨文:

SELECT * 
    FROM (
      SELECT PlayerId, SUM(AST) 
       FROM tblIndStats S 
      GROUP BY PlayerId 
      ORDER BY SUM(AST) DESC 
     ) 
    WHERE ROWNUM <= 5 

SQL服務器:

SELECT TOP(5) * 
    FROM (
      SELECT PlayerId, SUM(AST) 
       FROM tblIndStats S 
      GROUP BY PlayerId 
      ORDER BY SUM(AST) DESC 
     ) 

我的SQL:

SELECT * 
    FROM (
      SELECT PlayerId, SUM(AST) 
       FROM tblIndStats S 
      GROUP BY PlayerId 
      ORDER BY SUM(AST) DESC 
     ) 
    LIMIT 5 
+0

SQL-Server解決方案是錯誤的(並且不會運行),順序應該在子查詢之外。在MySQL解決方案中,子查詢之外的訂單也會更好。最後,在所有這三種解決方案中,子查詢中的聚合列都需要一個別名。 – GarethD

+0

爲什麼要在不需要它們的時候首先進行子查詢? *(除了Oracle是AFAIK)* –

2

對於SQL Server

SELECT TOP 5 
    PlayerID, SUM(AST) ASTSUM 
FROM tblIndStats 
GROUP BY PlayerID 
ORDER BY ASTSUM DESC 
2

這應該讓你前5 的Microsoft SQL Server

select top 5 PlayerID, sum(AST) as SumAST 
from tblIndStats 
group by PlayerID 
order by SumAST desc --, PlayerID 

運行例如:這裏有一個SQL Fiddle初見成效。示例顯示前5名,前5名以及所有結果供參考。

不同的問題 - 在第五位

但這裏有一個不同的問題,以及幾名球員。如果你的最後(第五)記錄是由幾個玩家分享的話呢?說他們三個有相同的AST總和。那麼你會在結果中包含哪一個?我的例子小提琴數據顯示,有三名玩家都有SumAST = 3

有關係的救援

對於這樣的情況

你可以使用SQL Server with ties,它會自動包括最後的地方相匹配的所有記錄,這樣你就不會忘記那應該也兌現任何球員(公平玩寶貝)。 ;)

select top 5 with ties PlayerID, sum(AST) as SumAST 
from tblIndStats 
group by PlayerID 
order by SumAST desc 

+0

另一個解決問題的方法是使用'WITH TIES'返回7個結果,因爲最後3個結果相同。 [SQL Fiddle](http://www.sqlfiddle.com/#!3/57ff0/8) – GarethD

+0

@GarethD:的確如此!我將其包含在我的回答中,並更新了我的小提琴更新,因爲完整結果未包含在結果窗格中。 –