SQL开发知识:MySQL中rank() over、dense_rank() over、row_number() over用法详解
2023-06-13 09:19:14 时间
本篇介绍的三个函数均MySQL 8.x 以上版本,8.x以下版本会报语法错误,属于正常现象。
MySQL 8.x 实际上就是 MySQL 5.8x,大概是为了通过更大版本型号数字,证明自己比友商先进吧。
你可以通过 mysql version (cmd命令)或者 select version() (sql语句)查看MySQL版本型号。
LeetCode.178题(https://leetcode-cn.com/problems/rank-scores/)
上述的这道题,如果不使用本次用到的函数的答案如下,也就是说,如果你的MySQL无法使用本篇中的函数,可以通过下面的语法逻辑做替换。
SELECT t1.Score as Score, ( SELECT COUNT(DISTINCT t2.Score) FROM Scores t2 WHERE t2.Score = t1.Score ) AS `Rank`FROM Scores t1 ORDER BY t1.Score DESC 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
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 SQL开发知识:MySQL中rank() over、dense_rank() over、row_number() over用法详解
相关文章
- SQL开发知识:Mysql生成数据字典的原理与实例
- 语句MySQL优化:精确掌握SQL语句(mysql优化sql)
- MySQL的更新SQL实用技巧(mysql更新sql)
- MySQL免安装版的简单配置指南(mysql免安装版的配置)
- MySQL数据库操作:掌握基本SQL语句(mysql数据库的语句)
- MySQL创建数据库的SQL语句示例(mysql创建库语句)
- 数据库西部数码开发MySQL数据库(西部数码mysql)
- 简单易学,PHP与MySQL开发初窥门径(php与mysql开发)
- MySQL: 了解关键字的重要性(mysql中的关键字)
- MySQL清空表的最佳实践:TRUNCATE TABLE(mysql清空表命令)
- 位MySQL 64 bit安装包: 快速安装MySQL服务器!(mysql安装包64)
- 中的作用利用MySQL视图提升实际开发效率(mysql视图实际开发)
- 查看 MySQL 版本号的方法(获取mysql版本)
- 深入浅出:MySQL中AND和OR运算符使用方法(mysql中and和or)
- Mysql中常用的运算符汇总(mysql的运算符)
- MySQL驱动Qt开发:新开发者的进阶指南(mysql驱动 qt)
- MySQL大全:从入门到精通,一个全面的数据库教程(mysql大全)
- C语言从MySQL数据库中取值(c 从mysql取值)
- CMD驱动MySQL,轻松掌握SQL语法(cmd启用mysql语法)
- MySQL中实现动态SQL的方法与技巧(mysql中动态sql)
- MySQL开发工程师一个月收入究竟多少(mysql一个月工资多少)
- MySQL如何处理不传值情况(mysql不传值)
- SQL语句中MySQL的两种升序排序方法(mysql两种升序)
- 解决MySQL不支持的SQL语句(mysql不支持的sql)
- 异探究Oracle中两段SQL差异(oracle两段sql差)