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;

相关推荐
七夜zippoe1 小时前
OpenClaw 数据加密:敏感信息保护的完整方案
数据库·mysql·php·openclaw·敏感保护
万亿少女的梦1681 小时前
基于Node.js和Express的旅游信息管理平台设计与开发
mysql·node.js·express·系统设计·旅游信息管理
万亿少女的梦16812 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue
万亿少女的梦16812 小时前
基于SpringBoot与Vue的历史博物馆展品展示与游客管理系统设计
spring boot·mysql·vue·系统设计·博物馆管理系统
灯澜忆梦15 小时前
MySQL 完整学习路线
学习·mysql
ClouGence15 小时前
保障公共安全,一线治安机构实时数据应用与实践
数据库·mysql·postgresql
Minxinbb15 小时前
TDSQL for MySQL 服务器重启操作
数据库·mysql·dba
渣渣灰飞17 小时前
MySQL 系统学习 第二阶段 第三章 DQL(Data Query Language)第三节:ORDER BY + LIMIT(排序 + 分页)
数据库·学习·mysql
fengbingchun19 小时前
客户端获取服务器端MySQL数据库表中数据C++实现
mysql
渣渣灰飞19 小时前
MySQL 系统学习 第二阶段 第三章 DQL(Data Query Language)第二节:WHERE 条件查询
sql·学习·mysql