根据我对您帖子的待定评论...
每个竞争对手都有所有站点的总成绩......如果多个竞争对手之间存在“平局”,您希望从第 3 站提供的得分最高的那些被排序到顶部(在相同的“总成绩”组中的竞争对手),如果相同,则根据第 2 站的最高分数排序下一个级别,最后是第 1 站的分数。
select
R.competitor_id,
sum( R.result ) as TotalResults,
max( case when R.Station = 3 then R.Result else 0 end ) as Station3,
max( case when R.Station = 2 then R.Result else 0 end ) as Station2,
max( case when R.Station = 1 then R.Result else 0 end ) as Station1
from
Results R
group by
R.competitor_ID
order by
TotalResults DESC,
Station3 DESC,
Station2 DESC,
Station1 DESC;
SQL 小提琴查询
编辑每个问题/评论
每个站的 MAX() 是因为您按每个竞争对手分组。您不想多次计算每个站,因为您将有 3 条记录,并且您必须按所有非聚合字段进行分组(许多 SQL 引擎需要,有些不关心,只获取第一个实例)。因此,当处理第一条记录时,它会填充站 1,但 2 和 3 是零值,您不希望将其作为排序的基础。然后当第二条记录被处理时,您填充了 1 和 2,仍然坐着在第三个。因此,通过应用 MAX(),您将获得每个站的最高值...每个“0”实例及其实际结果...现在有意义吗?