MySQL 实现 row_number() over(partition by) 分组排序功能 mysql 8 MySQL ROW_NUMBER()从8.0版开始引入了功能。这ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应用的每一行分配一个序号。
mysql 8 之前的替代方案 SELECT t.*, @rownum := @rownum + 1 AS rank FROM YOUR_TABLE t, (SELECT @rownum := 0) r http://mrcelite.blog.51cto.com/2977858/745913
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://mrcelite.blog.51cto.com/2977858/745913
由于MySQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MySQL里需要实现这样的功能,我们只能用一些灵活的办法:
首先我们来创建实例数据: drop table if exists c; CREATE TABLE `heyf_t10` ( `empid` INT(11) NULL DEFAULT NULL, `deptid` INT(11) NULL DEFAULT NULL, `line` DECIMAL(10,2) NULL DEFAULT NULL ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB ; INSERT INTO `heyf_t10` (`empid`, `deptid`, `line`) VALUES (1,10,5500.00), (2,10,4500.00), (3,20,1900.00), (4,20,4800.00), (5,40,6500.00), (6,40,14500.00), (7,40,44500.00), (8,50,6500.00), (9,50,7500.00); 确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次. 显示结果预期如下: +——-+——–+———-+——+ | empid | deptid | line | rank | +——-+——–+———-+——+ | 1 | 10 | 5500.00 | 1 | | 2 | 10 | 4500.00 | 2 | | 3 | 20 | 1900.00 | 1 | | 4 | 20 | 4800.00 | 2 | | 5 | 40 | 6500.00 | 1 | | 6 | 40 | 14500.00 | 2 | | 7 | 40 | 44500.00 | 3 | | 8 | 50 | 6500.00 | 1 | | 9 | 50 | 7500.00 | 2 | +——-+——–+———-+——+
...