- 浏览: 786252 次
- 性别:
- 来自: 广州
文章分类
最新评论
RANK()既是一个聚合函数,也是一个分析函数
其具体的语法如下:
聚合函数语法:
分析函数的语法:
RANK计算的是一个组值中每个值的等级,返回的是整数
作为聚合函数时,例子如下:
SELECT RANK(1250, 30) WITHIN GROUP(ORDER BY sal,deptno) "Rank" FROM emp;
Rank
----------
3
上面SQL表示的意思是:sal 为1250,并且deptno为30的记录,通过sal,deptno排序后所在的位置。
原表的结果如下:
SQL> select * from emp order by sal,deptno;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7900 JAMES CLERK 7698 03-DEC-81 950 30
7369 SMITH CLERK 7902 17-DEC-80 1064.8 20
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7876 ADAMS CLERK 7788 23-MAY-87 1464.1 20
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7934 MILLER CLERK 7782 23-JAN-82 1730.3 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 3260.95 10
7566 JONES MANAGER 7839 02-APR-81 3959.73 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 19-APR-87 3993 20
7902 FORD ANALYST 7566 03-DEC-81 3993 20
7839 KING PRESIDENT 17-NOV-81 6655 10
14 rows selected.
作为分析函数使用时,其意思是分析每个记录的排序或等级,rank()值相同时排名相同,其后排名跳跃不连续
SQL> select *
2 from ( select deptno,
3 rank() over(partition by deptno order by sal desc) rw,
4 ename, sal
5 from emp ) where rw <= 4;
DEPTNO RW ENAME SAL
---------- ---------- ---------- ----------
10 1 KING 6655
10 2 CLARK 3260.95
10 3 MILLER 1730.3
20 1 SCOTT 3993
20 1 FORD 3993
20 3 JONES 3959.73
20 4 ADAMS 1464.1
30 1 BLAKE 2850
30 2 ALLEN 1600
30 3 TURNER 1500
30 4 WARD 1250
DEPTNO RW ENAME SAL
---------- ---------- ---------- ----------
30 4 MARTIN 1250
12 rows selected.
注意:作为分析函数时,与DENSE_RANK()和ROW_NUMBER()的区别。
dense_rank()值相同时排名相同,其后排名连续不跳跃
row_number()值相同时排名不相等,其后排名连续不跳跃
其具体的语法如下:
聚合函数语法:
分析函数的语法:
RANK计算的是一个组值中每个值的等级,返回的是整数
作为聚合函数时,例子如下:
SELECT RANK(1250, 30) WITHIN GROUP(ORDER BY sal,deptno) "Rank" FROM emp;
Rank
----------
3
上面SQL表示的意思是:sal 为1250,并且deptno为30的记录,通过sal,deptno排序后所在的位置。
原表的结果如下:
SQL> select * from emp order by sal,deptno;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7900 JAMES CLERK 7698 03-DEC-81 950 30
7369 SMITH CLERK 7902 17-DEC-80 1064.8 20
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7876 ADAMS CLERK 7788 23-MAY-87 1464.1 20
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7934 MILLER CLERK 7782 23-JAN-82 1730.3 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 3260.95 10
7566 JONES MANAGER 7839 02-APR-81 3959.73 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 19-APR-87 3993 20
7902 FORD ANALYST 7566 03-DEC-81 3993 20
7839 KING PRESIDENT 17-NOV-81 6655 10
14 rows selected.
作为分析函数使用时,其意思是分析每个记录的排序或等级,rank()值相同时排名相同,其后排名跳跃不连续
SQL> select *
2 from ( select deptno,
3 rank() over(partition by deptno order by sal desc) rw,
4 ename, sal
5 from emp ) where rw <= 4;
DEPTNO RW ENAME SAL
---------- ---------- ---------- ----------
10 1 KING 6655
10 2 CLARK 3260.95
10 3 MILLER 1730.3
20 1 SCOTT 3993
20 1 FORD 3993
20 3 JONES 3959.73
20 4 ADAMS 1464.1
30 1 BLAKE 2850
30 2 ALLEN 1600
30 3 TURNER 1500
30 4 WARD 1250
DEPTNO RW ENAME SAL
---------- ---------- ---------- ----------
30 4 MARTIN 1250
12 rows selected.
注意:作为分析函数时,与DENSE_RANK()和ROW_NUMBER()的区别。
dense_rank()值相同时排名相同,其后排名连续不跳跃
row_number()值相同时排名不相等,其后排名连续不跳跃
发表评论
-
Oracle 10g 的clusterware 32位 下载地址
2013-04-19 23:03 1215Oracle 10g 的clusterware 32位 下载地 ... -
oracle 分析函数
2013-04-09 23:25 1175分析函数是用于计算一组中多行的聚合值,与聚合函数的区别在于聚合 ... -
批量执行 bulk collect与forall用法
2013-04-08 23:49 1395BULK COLLECT 子句会批量检 ... -
pl/sql集合类型
2013-03-26 10:12 1575--集合类型 /* 单行单列的数据,使用标量变量 单行 ... -
oracle 行链接与行迁移
2013-03-16 01:06 1105表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放 ... -
oracle Health Monitor
2013-01-20 00:02 1614About Health Monitor Beginning ... -
oracle moving window size与 AWR retention period关系
2013-01-19 15:58 8488转自: http://tomszrp.itpub.net/po ... -
Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEX
2013-01-12 00:20 2916insert提示IGNORE_ROW_ON_DUPKEY_IN ... -
oracle 11g新特性Flashback data archive
2013-01-09 22:52 30871. 什么是flashback data archive F ... -
RMAN List和report 命令
2012-12-25 00:07 2900LIST 命令 使用RMAN LIST 命令显示有关资料档案库 ... -
oracle ASM中ASM_POWER_LIMIT参数
2012-12-24 23:46 6432ASM_POWER_LIMIT 该初始化参数用于指定ASM例程 ... -
oracle I/O 从属进程
2012-12-24 23:24 1427I/O 从属进程 I/O从 ... -
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
2012-12-19 23:43 5641用easy connect连接出现“tns无法解析指定的连接标 ... -
Flashback Database --闪回数据库
2012-12-19 23:38 1393Flashback 技术是以Undo segment中的内容为 ... -
Oracle 11g新特性:Automatic Diagnostic Repository
2012-12-19 22:35 1395Oracle Database 11g的FDI(Fault D ... -
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
2012-12-19 22:09 2700RMAN配置中通道(CHANNEL)相 ... -
oracle 空间RESUMABLE
2012-12-14 22:05 3062空间RESUMABLE操作 转 Oracle从9i开始 ... -
oracle 创建视图 with check option
2012-12-13 23:14 1532我们来看下面的例子: create or replace vi ... -
flashback transaction闪回事务查询
2012-11-26 22:00 1505闪回事务查询有别于闪回查询的特点有以下3个: (1) ... -
pl/sql连不上oracle数据库
2012-11-21 22:56 3752pl/sql 9.2版本连不上oracle数据库 当系统安装 ...
相关推荐
### Oracle分析函数详解 #### 一、Oracle分析函数概述 Oracle分析函数是在处理大量数据时极为有用的一套工具,主要用于在线分析处理(OLAP)场景。这类函数可以在多个级别上进行数据聚合,并支持复杂的排序、分组...
其中,Oracle的分析函数是其强大的特性之一,它允许用户在单个SQL查询中执行复杂的分析操作,而无需使用子查询或者自连接。这篇文档将深入探讨Oracle中的分析函数,帮助你更好地理解和利用这一功能。 一、什么是...
Oracle分析函数是数据库管理系统Oracle中的一个强大特性,它允许用户在SQL查询中执行复杂的分析操作。分析函数在处理报表和数据迁移任务时尤其有用,因为它们可以基于分组计算聚合值,并为每个分组返回多行,而不...
2 Oracle开发专题之:分析函数 Rank Dense rank row number 3 Oracle开发专题之:分析函数3 Top Bottom N First Last NTile 4 Oracle开发专题之:窗口函数 5 Oracle开发专题之:报表函数 6 Oracle开发专题之:...
Oracle 分析函数是一种强大的SQL工具,它允许你在处理数据时执行复杂的分析操作,而不像聚合...参考书籍如Tom Kyte的《Expert One-on-One》和Oracle 9i SQL Reference等,都是深入学习和理解Oracle分析函数的宝贵资源。
Oracle 分析函数详解 Oracle 分析函数是 Oracle 数据库中的一种强大功能,能够帮助用户快速进行数据分析和处理。在本文中,我们将对 Oracle 分析函数进行详细的介绍,并对其各个函数进行解释。 一、总体介绍 ...
Oracle的分析函数还包括`ROW_NUMBER`, `RANK`, `DENSE_RANK`用于行号分配,`LEAD`, `LAG`用于获取前后行数据,`FIRST_VALUE`, `LAST_VALUE`获取窗口范围内的第一个或最后一个值,以及`NTILE`进行分桶等。这些函数在...
Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...
Oracle分析函数是数据库管理系统Oracle中的一种高级特性,用于处理和分析数据集,提供了一种高效的方式来执行聚合操作,而无需多次查询数据库。分析函数能够直接在单次查询中完成复杂的数据计算,包括排序、分组、...
Oracle分析函数是数据库管理系统Oracle中一组强大的工具,用于处理集合数据,特别是在复杂的报表和数据分析场景中。它们允许用户在单个SQL查询中执行聚合操作,同时保持行的原始顺序,这是传统的GROUP BY函数无法...
Oracle 分析函数是数据库查询中的强大工具,它们允许在单个SQL语句中对结果集进行复杂的计算和分组操作,极大地简化了数据分析的过程。在Oracle 8i版本之后引入,分析函数为处理大量数据提供了高效的方法,避免了...
分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述 ROW_NUMBER () OVER([partition_clause]...
ORACLE分析函数 ORACLE分析函数是数据库管理系统中的一种功能强大且灵活的分析工具,能够对数据进行复杂的分析和处理。通过使用分析函数,开发者可以更加方便地实现业务逻辑,提高查询效率和数据处理速度。 在本...
除了这些,Oracle分析函数还包括RANK、DENSE_RANK、ROW_NUMBER等排名函数,LEAD和LAG用于获取当前行之前或之后的值,FIRST_VALUE和LAST_VALUE则返回窗口内的第一个或最后一个值,以及NTILE用于将数据分桶等。...
Oracle分析函数是数据库管理系统Oracle中的一个重要特性,自8.1.6版本开始引入,它们用于执行基于组的聚合计算,并且为每个组返回多行结果,而不仅仅是单行。这使得分析函数在数据分析和报表生成方面非常有用,能够...
Oracle 分析函数、窗口函数和报表函数是数据库查询和数据分析中的关键工具,尤其在复杂的OLAP(在线分析处理)系统中发挥着重要作用。在Oracle数据库中,这些功能提供了对大量数据进行高效处理的能力,帮助用户生成...
《深入浅出Oracle分析函数》是一本专注于Oracle数据库中分析函数使用的专著。Oracle分析函数是数据库查询中不可或缺的一部分,尤其对于数据分析师和数据库管理员来说,掌握这些函数能极大地提高数据处理的效率和精度...
Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,自8.1.6版本引入,极大地扩展了SQL在数据处理和分析上的能力。分析函数的主要作用是进行聚合操作,但与传统的聚合函数(如SUM, COUNT, AVG等)不同,它们...
Oracle分析函数是数据库管理系统Oracle中的一种高级查询工具,主要用于处理复杂的报表统计和数据分析。它们在OLAP(在线分析处理)系统中尤其重要,因为这类系统往往需要处理大量数据并进行复杂的聚合计算,而分析...