TSQL - 多个团队的前3个记录的总和

时间:2014-04-01 16:17:28

标签: sql sql-server tsql select nested

我正在尝试生成一个TSQL查询,该查询将获得一组团队的前3个分数(大约50个),总计这3个分数的总和,并给我一个只有名称的结果集球队,以及得分总分下降的总得分。我很确定它是一个嵌套查询 - 但是对于我的生活来说无法让它工作! 以下是具体细节,只涉及一张表....

table = comp_lineup(此表为比赛中的每位运动员保留单独的记录)

* athlete
* team
* score

有很多运动员参加比赛 - 每个人都属于一个团队。

示例:

id     athlete     team     score<br>
1      1           1        24<br>
2      2           1        23<br>
3      3           2        21<br>
4      4           2        25<br>
5      5           1        20<br>

谢谢!

2 个答案:

答案 0 :(得分:2)

这确实是一个子查询,我经常把它放在CTE中而不仅仅是为了清晰。诀窍是使用rank()函数。

;with RankedScores as (
    select
        id,
        athlete,
        team,
        score,
        rank() over (partition by team order by score desc) ScoreRank
    from
        @scores
)
select
    Team,
    sum(Score) TotalScore
from
    RankedScores
where
    ScoreRank <= 3
group by
    team
order by
    TotalScore desc

答案 1 :(得分:0)

要为查询模板

获取每组数据的前n个值
Select group_value, sum(value) total_value
From   mytable ext
Where  id in (Select   top *n* id 
              From     mytable sub 
              Where    ext.group_value = sub.group_value 
              Order By value desc)
Group By group_value

子查询仅检索当前group_value的有效数据的ID,两个数据集之间的连接是Where ext.group_value = sub.group_value部分,主查询中的WHERE用于屏蔽每个其他ID,如游标

对于具体问题,模板变为

Select team, sum(score) total_score
From   mytable ext
Where  id in (Select   top 3 id 
              From     mytable sub 
              Where    ext.team = sub.team 
              Order By score desc)
Group By team
Order By sum(score) Desc

在主查询中添加了Order By以降低总分