【力扣白嫖日记】178.分数排名

02-29 阅读 0评论

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

【力扣白嫖日记】178.分数排名,【力扣白嫖日记】178.分数排名,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,设置,第1张
(图片来源网络,侵删)

今日题目:

178.分数排名

表:Scores

列名类型
idint
scoredecimal

在 SQL 中,id 是该表的主键。

该表的每一行都包含了一场比赛的分数。Score 是一个有两位小数点的浮点值。

查询并对分数进行排序。排名按以下规则计算:

  • 分数应按从高到低排列。
  • 如果两个分数相等,那么两个分数的排名应该相同。
  • 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
  • 按 score 降序返回结果表。

    我那不值一提的想法:

    • 首先梳理表内容,题干一共给了一张分数表,记录了比赛id,以及比赛分数。
    • 其次分析需求
    • 第一个需求,分数从高到低,这个简单,order by score desc
    • 第二个需求,分数相等,分数排名一样,对排名结果进行列数字排序,这个需求我想了很久,但是没有思路,于是我看了题解
    • 看了题解我觉得比较简单易懂的有两种方法
    • 首先第一种是子查询,对于比我们高成绩的同学如果你是98分,你前面有一个同学是99分,那么你就是第二名,我们可以通过两张表来实现,第一张s1表就是你的成绩,第二张s2表就代表成绩比你好的同学,设置条件s2.score>=s1.score,然后对这一部分进行计数,你前面加你一共几个人,你就是第几名。
      select s1.score,
      (
          select count(distinct s2.score) 
          from Scores s2
          where s2.score >= s1.score
      ) as 'rank'
      from Scores s1 
      order by s1.score desc
      
      • 第二种方法就是窗口函数,当然我没有学过,这里就当是积累窗口函数的用法。这里使用dense_rank函数,dense_rank函数是 SQL 中的一种窗口函数,用于计算排名。它为结果集中的每一行分配一个排名值,这个值与根据特定排序条件(通常是 ORDER BY 子句)排列的行的位置相对应。与普通的 RANK() 函数不同,DENSE_RANK() 函数会跳过相同的排名,并在下一个不同的值出现时递增排名。
        select score,dense_rank() over (order by score desc) as 'rank'
        from Scores
        

        虽然窗口函数代码简单,但我还是觉得子查询的逻辑更加清楚一点,更加容易懂一点。

        【力扣白嫖日记】178.分数排名,【力扣白嫖日记】178.分数排名,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,设置,第2张
        (图片来源网络,侵删)

        结果:

        • 子查询

          【力扣白嫖日记】178.分数排名

        • 窗口函数

          【力扣白嫖日记】178.分数排名


          总结:

          能运行就行。


          【力扣白嫖日记】178.分数排名,【力扣白嫖日记】178.分数排名,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,设置,第5张
          (图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

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

目录[+]