ROW_NUMBER() OVER是一个很强大的函数,虽然不常用,但是需要的时候觉得很好很强大。
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)
语法说明:先根据COLUMN1进行分组,然后根据COLUMN2进行排序,值从1开始计算
举例:
表:TABLE_STUDENT
ID | NAME | MATH | ENGLISH |
1 | 张三 | 98 | 75 |
1 | 张三 | 88 | 89 |
2 | 李四 | 68 | 45 |
2 | 李四 | 77 | 68 |
3 | 王五 | 99 | 42 |
如果我们要在这个表中取每个人MATH成绩最高的那条记录
SELECT * FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY MATH DESC) RM ,ID,NAME,MATH,ENGLISH
FROM TABLE_STUDENT
) WHERE RM = '1'
那么结果为:
RM | ID | NAME | MATH | ENGLISH |
1 | 1 | 张三 | 98 | 75 |
1 | 2 | 李四 | 77 | 68 |
1 | 3 | 王五 | 99 | 42 |
因此,这个函数在去重方面很好用。
其中 PARTITION BY COLUMN1 可以省略,那么该函数变成了根据COLUMN2进行排序,并给每条记录1个序号,该序号从1开始