MySQL5.7实现 row_number() over()函数的功能

SELECT id

,class

,score

,rank

FROM (SELECT b.*

-- 定义用户变量 @rownum 来记录数据的行号。通过赋值语句 @rownum := @rownum + 1 来累加达到递增行号。

,@rownum := @rownum+1

-- 如果当前分组编号和上一次分组编号相同,则 @rank (对每一组的数据进行编号)值加1,否则表示为新的分组,从1开始

,IF(@pdept = b.class, @rank := @rank + 1, @rank := 1) AS rank

-- 定义变量 @pdept 用来保存上一次的分组id

,@pdept := b.class

-- 这里的排序不确定是否需要,保险点还是加上吧

FROM (SELECT * FROM test1 a ORDER BY a.class, a.score DESC) b

-- 初始化自定义变量值

,(SELECT @rownum :=0, @pdept := NULL, @rank:=0) c

-- 该排序必须,否则结果会不对

ORDER BY b.class, b.score DESC) result

order by class, rank;

相关推荐
夜雪一千2 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
程序员夏洛6 小时前
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
数据库·mysql
l1258657 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
梦Arrebol7 小时前
Mysql内容及相关实验
数据库·mysql
OceanWaves19938 小时前
mysql 8.0.32 磁盘爆满,清理从库日志
数据库·mysql
霸道流氓气质9 小时前
MySQL 大表 DDL 变更 — 原理、方案与实践
android·数据库·mysql
JavaPub-rodert10 小时前
Go 后台如何同时兼容 MySQL、PostgreSQL、SQLite 和 SQL Server?从 ShiyuAdmin 看 GORM 多数据库适配
数据库·mysql·postgresql·golang·javapub·王仕宇
Code额11 小时前
基于 SQLAlchemy 2.x,面向 MySQL 数据库的从入门到精通实战教程(2)
数据库·sql·mysql·adb·ai
爱吃火鸡面呀12 小时前
MySQL 查询与函数详解:从基础条件筛选到高级字符处理
数据库·mysql
知行产研12 小时前
中国矿山无人驾驶出海的三重门
数据库·mysql·php