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;

相关推荐
Zzzzmo_7 小时前
【MySQL】JDBC(含settings.xml文件配置/配置国内镜像以及pom.xml文件修改)
数据库·mysql
FirstFrost --sy8 小时前
MySQL内置函数
数据库·mysql
eggwyw8 小时前
MySQL-练习-数据汇总-CASE WHEN
数据库·mysql
mygljx11 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
Bdygsl12 小时前
MySQL(1)—— 基本概念和操作
数据库·mysql
身如柳絮随风扬12 小时前
什么是左匹配规则?
数据库·sql·mysql
jiankeljx13 小时前
mysql之如何获知版本
数据库·mysql
小李来了!13 小时前
数据库DDL、DML、DQL、DCL详解
数据库·mysql
我科绝伦(Huanhuan Zhou)14 小时前
【生产案例】MySQL InnoDB 数据损坏崩溃修复
数据库·mysql·adb
海棠蚀omo15 小时前
从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)
数据库·mysql