oracle

推荐列表 站点导航

当前位置:首页 > 数据库 > oracle >

Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法

来源:网络整理  作者:网络  发布时间:2020-12-13 01:40
Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法,需要的朋友可以参考下。...
5
JONES 2975 FORD
RANK() 类似,不过RANK 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名
2
WARD 1250 MARTIN
30 1
5
5

相比之下row_number是没有重复值的
LAG 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL


ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)

SQL> select deptno,dense_rank() over(partition by deptno order by sal) from emp order by deptno;
已用时间: 00: 00: 00.41

已用时间: 00: 00: 00.21
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式





JONES 2975 ADAMS
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
SMITH 800 JONES
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)
10
20 1
TURNER 1500 MARTIN
BLAKE 2850 example
SQL> select rownum from emp;
6
MILLER 1300 KING
30 1
2



10 CLARK 2450 example
p order by deptno;
SQL> select deptno,ename,sal,lag(ename,2,'example') over(partition by deptno order by ename) from em
2

---------- ---------------------------------------------
已用时间: 00: 00: 00.31
7
10 CLARK 2450
4
已选择14行。
13
已选择14行。
---------- ---------------------------------------

3

4
表示根据COL1分组,在分组内部根据 COL2排序
2
---------- ---------- ---------- ----------
3
2
FORD 3000 example
10 1
6
3
5
3
BLAKE 2850 ALLEN
1
DEPTNO RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
4
----------
2
2
4
---------- ---------------------------------------------
2

ROWNUM
20 1
DEPTNO ROW_NUMBER()OVER(PARTITIONBYDEPTNOORDERBYSAL)
20 1

TURNER 1500 JAMES
3
12
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。
3
2
4
SQL> select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) from emp ord

20 ADAMS 1100
arg3是在arg2表示的数目超出了分组的范围时返回的值。
已选择14行。
20 ADAMS 1100 example


已选择14行。 而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)
2
10 1

MARTIN 1250 BLAKE
er by deptno;
11
8
9

SMITH 800 SCOTT
14


SQL> set pagesize 100;
30 ALLEN 1600 example
3
KING 5000 CLARK
已选择14行。
DEPTNO ENAME SAL LAG(ENAME,
4
FORD 3000 ADAMS
4
WARD 1250 TURNER


MILLER 1300 CLARK
2

已用时间: 00: 00: 00.20
3

30 1
JAMES 950 ALLEN
4
BTW: EXPERT ONE ON ONE 上讲的最详细,还有很多相关特性,文档看起来比较费劲

2
6
JAMES 950 BLAKE
DEPTNO ENAME SAL LAG(ENAME,
MARTIN 1250 JAMES

10 1
SCOTT 3000 FORD
3

5
DEPTNO DENSE_RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
SQL> select deptno,rank() over (partition by deptno order by sal) from emp order by deptno;


rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

---------- ---------- ---------- ----------
KING 5000 example
30 ALLEN 1600

已用时间: 00: 00: 00.10
4
SQL> select deptno,row_number() over(partition by deptno order by sal) from emp order by deptno;


已选择14行。

SCOTT 3000 JONES

相关热词: oracle 方法

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/sql/oracle/3134.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法

2020-12-13 编辑:网络

5
JONES 2975 FORD
RANK() 类似,不过RANK 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名
2
WARD 1250 MARTIN
30 1
5
5

相比之下row_number是没有重复值的
LAG 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL


ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)

SQL> select deptno,dense_rank() over(partition by deptno order by sal) from emp order by deptno;
已用时间: 00: 00: 00.41

已用时间: 00: 00: 00.21
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式





JONES 2975 ADAMS
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
SMITH 800 JONES
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)
10
20 1
TURNER 1500 MARTIN
BLAKE 2850 example
SQL> select rownum from emp;
6
MILLER 1300 KING
30 1
2



10 CLARK 2450 example
p order by deptno;
SQL> select deptno,ename,sal,lag(ename,2,'example') over(partition by deptno order by ename) from em
2

---------- ---------------------------------------------
已用时间: 00: 00: 00.31
7
10 CLARK 2450
4
已选择14行。
13
已选择14行。
---------- ---------------------------------------

3

4
表示根据COL1分组,在分组内部根据 COL2排序
2
---------- ---------- ---------- ----------
3
2
FORD 3000 example
10 1
6
3
5
3
BLAKE 2850 ALLEN
1
DEPTNO RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
4
----------
2
2
4
---------- ---------------------------------------------
2

ROWNUM
20 1
DEPTNO ROW_NUMBER()OVER(PARTITIONBYDEPTNOORDERBYSAL)
20 1

TURNER 1500 JAMES
3
12
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。
3
2
4
SQL> select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) from emp ord

20 ADAMS 1100
arg3是在arg2表示的数目超出了分组的范围时返回的值。
已选择14行。
20 ADAMS 1100 example


已选择14行。 而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)
2
10 1

MARTIN 1250 BLAKE
er by deptno;
11
8
9

SMITH 800 SCOTT
14


SQL> set pagesize 100;
30 ALLEN 1600 example
3
KING 5000 CLARK
已选择14行。
DEPTNO ENAME SAL LAG(ENAME,
4
FORD 3000 ADAMS
4
WARD 1250 TURNER


MILLER 1300 CLARK
2

已用时间: 00: 00: 00.20
3

30 1
JAMES 950 ALLEN
4
BTW: EXPERT ONE ON ONE 上讲的最详细,还有很多相关特性,文档看起来比较费劲

2
6
JAMES 950 BLAKE
DEPTNO ENAME SAL LAG(ENAME,
MARTIN 1250 JAMES

10 1
SCOTT 3000 FORD
3

5
DEPTNO DENSE_RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
SQL> select deptno,rank() over (partition by deptno order by sal) from emp order by deptno;


rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

---------- ---------- ---------- ----------
KING 5000 example
30 ALLEN 1600

已用时间: 00: 00: 00.10
4
SQL> select deptno,row_number() over(partition by deptno order by sal) from emp order by deptno;


已选择14行。

SCOTT 3000 JONES

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/sql/oracle/3134.shtml

相关文章

风云图片

推荐阅读

返回oracle频道首页