Medium之178.分数排名

水深无声 2022-10-12 12:17 300阅读 0赞

问题

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

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


































Id Score
1 3.50
2 3.65
3 4.00
4 3.85
5 4.00
6 3.65

示例

例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):


































Score Rank
4.00 1
4.00 1
3.85 2
3.65 3
3.65 3
3.50 4

重要提示:对于 MySQL 解决方案,如果要转义用作列名的保留字,可以在关键字之前和之后使用撇号。例如 ‘Rank’

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rank-scores
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

法一:开窗函数

  1. select score,
  2. dense_rank() over(order by score desc) as 'Rank'
  3. from scores

一、开窗函数语法
开窗函数 over([partition by 要分区的列名] order by 要排序的列名) as ‘新的列名’

二、排名函数:
1.Row_number()
:排名连续 不重复,即使遇到表中的两个一样的数值亦是如此,即1,2,3,4
2.rank()
:相同数值,排名一样,但是下一个排名值是实际的序位数,即1,2,2,4
3.dense_rank()
:相同数值,排名一样,但是下一个排名是紧接着上一个排名位数继续,即1,2,2,3

法二:直接思维

  1. select s1.score,count(distinct s2.score) as 'Rank'
  2. from scores s1
  3. inner join scores s2
  4. on s1.score <= s2.score
  5. group by s1.id
  6. order by s1.score desc

用group by 是因为需要对每个数据进行排名,没有的话,只显示最小值的一条结果。

发表评论

表情:
评论列表 (有 0 条评论,300人围观)

还没有评论,来说两句吧...

相关阅读

    相关 178. 分数排名

    SQL架构 编写一个 SQL 查询来实现分数排名。 如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间

    相关 leetcode 178. 分数排名(SQL)

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

    相关 Medium178.分数排名

    问题 编写一个 SQL 查询来实现分数排名。 如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不

    相关 178. 分数排名

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

    相关 sql 178. 分数排名

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