1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > MySQL的排名函数 RANK() OVER DENSE_RANK() OVER ROW_NUMBER() OVER 用法介绍

MySQL的排名函数 RANK() OVER DENSE_RANK() OVER ROW_NUMBER() OVER 用法介绍

时间:2018-09-13 03:45:02

相关推荐

MySQL的排名函数 RANK() OVER DENSE_RANK() OVER ROW_NUMBER() OVER 用法介绍

本篇介绍的三个函数均MySQL 8.x 以上版本,8.x以下版本会报语法错误,属于正常现象。

MySQL 8.x 实际上就是MySQL 5.8x,大概是为了通过更大版本型号数字,证明自己比友商先进吧。

你可以通过 mysql --version (cmd命令)或者 select version() (sql语句)查看MySQL版本型号。

RANK() OVER(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。

说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。即:1 1 3 4 5 5 7

SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student

DENSE_RANK() OVER(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。

说明:和rank() over 的作用相同,区别在于dense_rank() over 排名是密集连续的。例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学接着下一个名次。即:1 1 2 3 4 5 5 6

SELECT id, name, score, dense_rank() over(ORDER BY score DESC) AS 'rank' FROM student

ROW_NUMBER() OVER(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名也不相同,排名间断不连续。

说明:这个函数不需要考虑是否并列,即使根据条件查询出来的数值相同也会进行连续排序。即:1 2 3 4 5 6

SELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student

后记

函数中的业务逻辑可以是复杂的,不局限于 ORDER BY,也可以加 PARTITION BY。

### 分班级排名SELECT id, name, score, class, row_number() over(PARTITION BY class ORDER BY score DESC) AS 'rank' FROM student

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。