SQL查询 - 求和并得到前5个结果

时间:2013-01-24 12:47:50

标签: 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

4 个答案:

答案 0 :(得分:2)

对于Sql Server

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

答案 1 :(得分:2)

这应该会在 Microsoft SQL Server

中获得前5名
select top 5 PlayerID, sum(AST) as SumAST
from tblIndStats
group by PlayerID
order by SumAST desc --, PlayerID

正在运行的示例:这是显示结果的SQL Fiddle。示例显示前5个,前5个扩展以及所有结果供参考。

一个不同的问题 - 第五名的几名球员

但这里也有一个不同的问题。如果您的最后一个(第五个)记录在多个玩家之间共享怎么办?假设其中3个具有相同的AST总和。那么您将在结果中包含哪一个?我的示例小提琴数据显示了这样一个场景:有三个玩家都有SumAST = 3

与TIES一起救援

对于这种情况,您可以在SQL Server中使用with ties,它将自动包含与最后一个匹配的所有记录,因此您不会忘记任何应该被尊重的玩家(公平竞赛宝贝)。 ;)

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

答案 2 :(得分:0)

甲骨文:

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

SQL Server:

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

答案 3 :(得分:-1)

(最高类型的构造可能是特定于数据库的)

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

您没有显示来自tblPlayers的任何其他列,因此不确定您希望从该表中获得什么。