我正在尝试生成一个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>
谢谢!
答案 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以降低总分