關於Oracle row_number() over()的簡單使用


 

簡單介紹:在Oracle中使用row_number() over()函數,對查詢的結果進行分組,並支持分組后的排序功能,這是我使用之后的簡單理解。

場景1:在面試過程中經常遇到的一個問題,把一個班中每一科成績最高的人查找出來。

思路:查詢出一個班所有科目的成績,使用row_number() over()按照科目分組並按成績降序排列。

表數據如圖所示:

 

sql語句:

SELECT T.NAME,T.SUBJECT,T.SCORE  ,row_number()OVER(PARTITION BY T.SUBJECT ORDER BY T.SCORE DESC) SEQ FROM JAVA_SCORE T;排序結果:

 

場景2:刪除成績表中科目重復的數據,僅保留分數最高的一條。

思路:row_number()OVER(PARTITION  By 字段1,字段2 ORDER BY 排序字段)中的PARTITION  By作用於分組函數group一致,但是row_number()OVER()的執行是在where 、group by、  order by 之后執行的。也就是對結果一個分組排序。

SQL:

DELETE FROM JAVA_SCORE where id in(                       --執行刪除操作
  SELECT ID FROM (
         SELECT T.ID, T.NAME,T.SUBJECT,T.SCORE  ,row_number()OVER(PARTITION BY T.SUBJECT ORDER BY T.SCORE DESC) SEQ FROM JAVA_SCORE T --按照科目分組,並根據分數排序
  ) T WHERE T.SEQ > 1 --篩選不是第一名的數據
)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM