oracle row_number() over()

ROW_NUMBER() OVER(partition by col1 order by col2)

将返回结果分组编号,将返回结果以col1字段分组,每个组内按照col2排序,并将这些分组排序后的记录编号,每个组内从1开始独立编号。

如有表T_1如下:

执行SQL:

SELECT ROW_NUMBER() OVER(PARTITION BY T.ID ORDER BY T.NAME DESC) RN,
       T.ID,
       T.NAME,
       T.RECORDDATE
  FROM T_1 T;

将得到如下结果:

上述结果是将select语句的返回结果按ID分为两组,各个组内按NAME字段降序排列并编号,各组内独立编号,后一个组的编号从1开始,不延续前一个组.

应用

如下面SQL取各个ID组内的按NAME降序的前两名

SELECT T1.ID, T1.NAME, T1.RECORDDATE
  FROM (SELECT ROW_NUMBER() OVER(PARTITION BY T.ID ORDER BY T.NAME DESC) RN,
               T.ID,
               T.NAME,
               T.RECORDDATE
          FROM T_1 T) T1
 WHERE T1.RN <= 2;
时间: 2024-10-11 12:56:10

oracle row_number() over()的相关文章

oracle row_number()

要求查询每个用户对应的最大样品信息,忽然想到ms sql提供过 row_number() over(partition by 列 order by 列 desc),那么oracle可能也存在, 我的表结构如下: create table NEOGOODSRULE ( ID NUMBER(22) not null, PERSONALID NVARCHAR2(50), CT_SMP_TYPE NVARCHAR2(100) ) tablespace VGSM pctfree 10 initrans 1

关于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.

大数据-sparkSQL

SparkSQL采用Spark on Hive模式,hive只负责数据存储,Spark负责对sql命令解析执行. SparkSQL基于Dataset实现,Dataset是一个分布式数据容器,Dataset中同时存储原始数据和元数据(schema) Dataset的底层封装了RDD,Row类型的RDD就是Dataset< Row >,DataFrame Dataset数据源包括:json,JDBC,hive,parquet,hdfs,hbase,avro... API 自带API Dataset

oracle数据库中 rownum 和row_number()的区别和练习

明确对于rownum 来说 它是oracle 系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是二,以此类推,这个为字段可以用于限制查询的返回的总行数,因为rownum总是从1开始,但是1以上的自然数在rownum 做等于判断时都认为是false 条件,所以无法查到 rownum=n (n>1的自然数),所以查找第二行以后的记录可以用子查询方法来解决,给子查询中的rownum取别名;对于小于某个值的情况两种方法都差不多,但是对于某个不等于一的值或者求某个值到某个值之间的情况,用

MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

网上看见了好多例子都基本上是一样的,没有过多的解释,对于一个初学MySQL来说有点难,我把部分转摘过来如下 原文:http://www.cnblogs.com/buro79xxd/archive/2012/08/29/2662489.html 要求目标:1.确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次. 创建表格:2.来创建实例数据: drop table if exists heyf_t10; create table heyf_t10 (empid int ,deptid i

Oracle中rownum和row_number()的区别

Oracle中 rownum,为符合where条件的输出结果集中现在有多少条记录. where条件中的rownum可以这样理解 select中的rownum可以理解为,将这条记录放到输出结果集中,就在这条记录中加上这个是第几行(输出一行生成一个) row_number() OVER (ORDER BY id),为结果记录集生成后,按给定字段排序后的行号 注意这两者都是在order by条件之前执行的.

ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法

Oracle 中的 ROW_NUMBER() OVER() 分析函数的用法 ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的). 举例: SQL> DESC T1; Name                                           Null?    Type----------------------

【转】oracle中rownum和row_number()

这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后

Oracle中的 row_number() over (partition by order by ) 用法

oracle 里面经常这样用 select col1,col2..., row_number() over (partition by colx order by coly) from table_name;; 这句话的意思是把表中的数值按照colx 分组,每一组内部按照coly排序,同时 row_number()返回排序之后该记录在改组内部的序号. 比如我们知道有emp表如下: SQL> SELECT * FROM SCOTT.EMP; EMPNO ENAME JOB MGR HIREDATE