我需要找到排名前5的球員,其中總數最多的是AST。SQL查詢 - 總結並獲得前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
我需要找到排名前5的球員,其中總數最多的是AST。SQL查詢 - 總結並獲得前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
(頂部類型的構造可能是特定數據庫)
select playerID, sum(AST)
from tblIndStats
group by playerID
order by sum(AST) desc
你不顯示任何其他來自tblPlayers的列,所以不知道你想從那張表中得到什麼。
這不是一個答案 – Cris
@Cris:它肯定是一個答案,但它絕對不是解決方案。 ;) –
甲骨文:
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
SQL-Server解決方案是錯誤的(並且不會運行),順序應該在子查詢之外。在MySQL解決方案中,子查詢之外的訂單也會更好。最後,在所有這三種解決方案中,子查詢中的聚合列都需要一個別名。 – GarethD
爲什麼要在不需要它們的時候首先進行子查詢? *(除了Oracle是AFAIK)* –
對於SQL Server
SELECT TOP 5
PlayerID, SUM(AST) ASTSUM
FROM tblIndStats
GROUP BY PlayerID
ORDER BY ASTSUM DESC
這應該讓你前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
。
對於這樣的情況
with ties
,它會自動包括最後的地方相匹配的所有記錄,這樣你就不會忘記那應該也兌現任何球員(公平玩寶貝)。 ;)select top 5 with ties PlayerID, sum(AST) as SumAST
from tblIndStats
group by PlayerID
order by SumAST desc
另一個解決問題的方法是使用'WITH TIES'返回7個結果,因爲最後3個結果相同。 [SQL Fiddle](http://www.sqlfiddle.com/#!3/57ff0/8) – GarethD
@GarethD:的確如此!我將其包含在我的回答中,並更新了我的小提琴更新,因爲完整結果未包含在結果窗格中。 –
你正在使用哪些DBMS? Oracle,Sql Server? – gustavodidomenico
[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)Stackoverflow是一個問答網站,而不是免費的代碼寫作服務。 – GarethD
詢問查詢級別問題時指定DBMS – Cris