美文网首页
mysql经典排名问题

mysql经典排名问题

作者: 尔东丶 | 来源:发表于2020-07-21 15:51 被阅读0次

问题:编写一个 SQL 查询来实现评分排名。如果两个分数相同,则两个分数排名(Rank)相同。

评分表ratings

方法一:不运用dense_rank(),运用子查询

解决这一问题可以分为两个步骤:

步骤一:降序排列分数

select a.Rating as Rating from ratings a order by a.Rating DESC;

步骤二:每个评分对应的排名

思路:可以先提取出大于等于X的所有分数集合H,将H去重后的元素个数就是X的排名。

先提取集合H:

select b.Rating from ratings b where b.Rating>= X;

再求出集合H去重之后的元素个数:

select count(distinct b.Score) from Scores b where b.Score >= X as Rank;

最终将两个步骤结合:

select a.Rating as Rating,

 (select count(distinct b.Rating) from ratings b where b.Rating >= a.Rating) AS "Rank"

from ratings a order by a.Rating DESC;


方法二:运用dense_rank()

select Rating, dense_rank() over (order by Rating desc) as "Rank" from ratings;

附:mysql中Rank()和dense_rank()的区别

不同点:RANK()是跳跃排序,即如果有两条记录重复,接下来是第三级别

如:1 2 2 4,会跳过3

DENSE_RANK()是连续排序,即如果有两条记录重复,接下来是第二级别

如:1 2 2 3

相关文章

  • mysql经典排名问题

    问题:编写一个 SQL 查询来实现评分排名。如果两个分数相同,则两个分数排名(Rank)相同。 方法一:不运用de...

  • mysql排名问题

    由于mysql不支持rank函数,所以mysql的排名只能通过其他方式实现。创建表并插入记录: 1、查询每门功课成...

  • MySQL分类排名问题

    实现对学生按课程依成绩高低进行排序 建表: 数据: 子查询 自连接 参考:https://mp.weixin.qq...

  • 在MySQL中实现Rank高级排名函数

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名。尽...

  • 在MySQL中实现Rank高级排名函数 风澈vio

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名。尽...

  • mysql 排名

    现在有一个 scores 积分表,记录用户的积分 现在要对积分进行排名,并计算用户的名次 这段 sql 的意思就是...

  • 查询获取排名

    参考 mysql 查询获取排名的方法(绝对有效)

  • 图解面试题:经典排名问题

    ​【题目】 下图是"班级"表中的内容,记录了每个学生所在班级,和对应的成绩。 现在需要按成绩来排名,如果两个分数相...

  • MySQL 实现排名(分组排名)

    在MYSQL的最新版本MYSQL8已经支持了排名函数RANK,DENSE_RANK和ROW_NUMBER。但是在5...

  • 【mysql】统计排名

    背景 关于排名最近的项目中有很多应用场景,例如:年度账单中注册时间打败了xx%的用户,投资金额打败了xx%的用户,...

网友评论

      本文标题:mysql经典排名问题

      本文链接:https://www.haomeiwen.com/subject/bgobkktx.html