MySQL 5.7 可以通过使用变量实现分组 row_number。实现方法如下:
SET @num := 0, @group := '';
SELECT *,
    @num := IF(@group = group_col, @num + 1, 1) AS row_number,
    @group := group_col AS dummy
FROM table_name
ORDER BY group_col, order_col;
其中,group_col 是要分组的列名,order_col 是排序的列名。
例如,假设有以下表格:
| id | name | department | 
|---|---|---|
| 1 | Amy | HR | 
| 2 | Bob | IT | 
| 3 | Cate | HR | 
| 4 | Dave | Marketing | 
如果想按照 department 分组,并为每个组内的行添加一个序号,可以使用以下查询语句:
SET @num := 0, @dept := '';
SELECT *,
    @num := IF(@dept = department, @num + 1, 1) AS row_number,
    @dept := department AS dummy
FROM employee
ORDER BY department, name;
执行结果如下:
| id | name | department | row_number | 
|---|---|---|---|
| 1 | Amy | HR | 1 | 
| 3 | Cate | HR | 2 | 
| 2 | Bob | IT | 1 | 
| 4 | Dave | Marketing | 1 | 
可以看到,同部门的员工被正确地分组,并且在组内根据 name 排序,同时每个组内的员工都获得了一个 row_number 序号。


 
                             
         
        
 
         
         
         
         
         
         
         
        
 
                 
                 
                 
                 
                 
                 
                 
                