1. 程式人生 > 其它 >row_number() over(partition by 列名1 order by 列名2 desc)的使用

row_number() over(partition by 列名1 order by 列名2 desc)的使用

表示根據列名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