1、格式
row_number() over(partition by 列名1 order by 列名2 desc)
2、解析
表示根據 列名1 分組,然后在分組內部根據 列名2 排序,而此函數計算的值就表示每組內部排序后的順序編號,可以用於去重復值
與rownum的區別在於:使用rownum進行排序的時候是先對結果集加入偽列rownum然后再進行排序,而此函數在包含排序從句后是先排序再計算行號碼.
3、實例
--分析函數
SELECT USER_NAME,
SCHOOL,
DEPART,
ROW_NUMBER() OVER(PARTITION BY USER_NAME ORDER BY SCHOOL, DEPART DESC)
FROM USER_M;
結果
--分析函數 SELECT * FROM (SELECT USER_NAME, SCHOOL, DEPART, ROW_NUMBER() OVER(PARTITION BY USER_NAME ORDER BY SCHOOL, DEPART DESC) RN FROM USER_M) WHERE RN = 1;
結果
--結合分頁 SELECT * FROM (SELECT A.USER_NAME, A.SCHOOL, A.DEPART, ROW_NUMBER() OVER(PARTITION BY SCHOOL ORDER BY USER_NAME, DEPART DESC) RN FROM (SELECT * FROM USER_M) A WHERE ROWNUM <= 10) WHERE RN >= 1;
結果