mysql8支持的几种排名函数,RANK、DENSE_RANK和ROW_NUMBER,但是8之前的版本还不支持,想要实现排名还得使用:=(赋值)、@(标识用户变量【读取、使用】)组合实现。
RANK、DENSE_RANK、ROW_NUMBER使用
首先创建如下数据表:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioSr6LFw-1681629379941)(/upload/2021/12/image-ce9bc18a89e04cdf96e781ce8cfce064.png)]
- RANK并列跳跃排名:排名会有间断,比如90、90、88、80排名就是1、1、3、4
结果:SELECT score, RANK() OVER(ORDER BY score DESC) rank_no FROM scores;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h8wsu3Aq-1681629379942)(/upload/2021/12/image-59fc62d0cf3f499893d75ee9c2b796d0.png)] - DENSE_RANK并列连续排序:并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,依然按照连续数字排名,比如90、90、88、80排名就是1、1、2、3
SELECT score, DENSE_RANK() OVER(ORDER BY score DESC) rank_no FROM scores;
结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PVFYCmY7-1681629379942)(/upload/2021/12/image-d65a880b07894609853776490b4ca8ee.png)]
- ROW_NUMBER连续排名:即使相同的值,依旧按照连续数字进行排名,比如90、90、88、80排名就是1、2、3、4
SELECT score,
ROW_NUMBER() OVER(ORDER BY score DESC) rank_no
FROM scores;
结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awM9Pazy-1681629379942)(/upload/2021/12/image-399f7a7b321445f58e41f92e39aa81d1.png)]