row_number() over(partition by 列名1 order by 列名2 desc)的使用
阿新 • • 發佈:2021-11-18
表示根據列名1分組,然後在分組內部根據列名2排序,而此函式計算的值就表示每組內部排序後的順序編號,可以用於去重複值
與rownum的區別在於:使用rownum進行排序的時候是先對結果集加入偽列rownum然後再進行排序,而此函式在包含排序從句後是先排序再計算行號碼.
---查詢所有姓名,如果同名,則按年齡降序SELECT name,age,detail,ROW_NUMBER() OVER(PARTITION BY name ORDER BY age DESC)
FROM TEST_Y;
通過上面的語句可知,是按照name欄位分組,按age欄位排序的。 如果只需查詢出不重複的姓名即可,則可使用如下的語句, 由查詢結果可知,姓名相同年齡小的資料被過濾掉了; SELECT * FROM
(SELECT name ,age, detail ,ROW_NUMBER() OVER ( PARTITION BY name ORDER BY age DESC )RN
FROM TEST_Y )
WHERE RN= 1
分頁 --先做一個子查詢,先按id1進行排序,排序完後,給每條記錄進行了編號 --然後再將子查詢做為一張表,就可以進行分頁了 select * from (select t.*,row_number() over(order by t.id1 asc) as rn from demo t) d where d.rn between 1 and 2
轉載自:https://blog.csdn.net/mzy755423868/article/details/80573654