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;

相关推荐
Fleshy数模15 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao16 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q17 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子1318 小时前
MySQL用户管理(十三)
数据库·mysql
Dxy123931021618 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋18 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣5018 小时前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
人道领域18 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
千寻技术帮19 小时前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot
spencer_tseng20 小时前
MySQL table backup
mysql