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;

相关推荐
禹凕40 分钟前
MySQL——基础知识(正则表达式)
数据库·mysql·正则表达式
独泪了无痕3 小时前
Mac Homebrew 安装 MySQL 指南
数据库·mysql·mac
fchampion3 小时前
MYSQL自学笔记
数据库·笔记·mysql
XiaoHu02073 小时前
MySQL基础(第一弹)
数据库·c++·mysql
小小工匠4 小时前
大模型开发 - SpringAI之MySQL存储ChatMemory
mysql·spring ai
fchampion4 小时前
MYSQL分析案例
数据库·mysql
Hoffer_7 小时前
更好理解ORDER BY内部排序和性能优化-mysql
后端·mysql
lzhdim7 小时前
SQL 入门 2:LIKE、正则、 ORDER BY 与LIMIT
数据库·sql·mysql
GDAL7 小时前
SQLite 的适用场景与选型指南:它不是轻量 MySQL,而是「文件的升级版」
数据库·mysql·sqlite
{Hello World}7 小时前
MySQL学习----------相关库表操作
数据库·学习·mysql