ROW_NUMBER():依次递增排名,无重复排名
语法:
ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)
意为:简单的说row_number()从1开始,为每一条分组记录返回一个数字,PARTITION BY表示将表中的记录按字段 COLUMN1进行分组,在分组内部按字段 COLUMN2 进行排序。因此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。
例1.salary表
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 18000 |
| 2 | 36500 |
| 3 | 40000 |
| 4 | 38500 |
| 5 | 40000 |
+----+--------+
> SELECT Salary, ROW_NUMBER() OVER (ORDER BY Salary DESC) rank FROM Salary
+--------+------+
| Salary | rank |
+--------+------+
| 40000 | 1 |
| 40000 | 2 |
| 38500 | 3 |
| 36500 | 4 |
| 18000 | 5 |
+--------+------+
这里的是先把Salary列降序,再为降序以后的每条Salary记录返回一个序号。
例2. 根据部门分组,显示每个部门的工资等级
+-------+--------+--------+
| empid | deptid | salary |
+-------+--------+--------+
| 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|
+-------+--------+--------+
> SELECT *, Row_Number()