关于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 --筛选不是第一名的数据 )
相关推荐
Omega 2020-08-16
娜娜 2020-07-28
goodriver 2020-06-17
lklong 2020-11-22
oraclemch 2020-11-06
shilukun 2020-10-10
周嘉笙 2020-11-09
iilegend 2020-10-19
EricRay 2020-10-16
zhuzhufxz 2020-09-16
dataminer 2020-08-17
bfcady 2020-08-16
Hody 2020-08-16
FightFourEggs 2020-08-16
数据库设计 2020-08-16
Seandba 2020-08-16
zjyzz 2020-08-16
yanghuatong 2020-08-16