码迷,mamicode.com
首页 > 数据库 > 详细

关于Oracle row_number() over()的简单使用

时间:2020-02-20 23:52:03      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:core   技术   简单介绍   group   row   delete   ack   ffffff   code   

 

简单介绍:在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 --筛选不是第一名的数据
)

关于Oracle row_number() over()的简单使用

标签:core   技术   简单介绍   group   row   delete   ack   ffffff   code   

原文地址:https://www.cnblogs.com/duck-ifox/p/12339730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!