天天看点

题目178、分数排名(Leetcode题解-java实现)

1、题目

编写一个 SQL 查询来实现分数排名。

如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

题目178、分数排名(Leetcode题解-java实现)

2、代码实现

1.从两张相同的表scores别名为s1,s2

2.s1中的score与s2中的score比较大小。意思是在输出s1.score的前提下,有多少个s2.score大于等于它。比如当s1.salary=3.65的时候,s2.salary中[4.00,4.00,3.85,3.65,3.65]有5个成绩大于等于他,但是利用count(distinct s2.score)去重可得s1.salary3.65的rank为3

3.group by s1.id 不然的话只会有一条数据

4.最后根据s1.score排序desc

(别名rank要加 **‘**号,是因为和内部rank函数命名冲突 )

select s1.score,count(distinct s2.score) as 'rank'
from scores as s1,scores as s2
where s1.score<=s2.score
group by s1.id
order by s1.score desc;