`
20386053
  • 浏览: 461618 次
文章分类
社区版块
存档分类
最新评论

Oracle rank和dense_rank排名函数

 
阅读更多

1.rank函数

rank计算一组值的排名,返回数字类型。排名可能是不连续。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 13 4 5。

  • 作为一个聚合函数,返回虚拟行在样表中的排名。
  • 作为一个解析函数,返回每一个的排名。

1.1聚合函数语法

1.2解析函数语法

1.3聚合函数的例子

计算假定薪水为2000的员工在样表中的排名。

SQL> select rank(2000) within group(order by e.sal desc) "Rank"
2 from emp e;

Rank
----------
7

假定薪水为2000的员工,按照薪水从高到低在样表中排第7名。

1.4解析函数的例子

按照薪水从高到低进行排名:

SQL> select e.ename, e.sal, rank() over(order by e.sal desc) "Rank" from emp e;

ENAME SAL Rank
---------- --------- ----------
KING 5000.00 1
FORD 3000.00 2
SCOTT 3000.00 2

JONES 2975.00 4
BLAKE 2850.00 5
CLARK 2450.00 6
ALLEN 1600.00 7
TURNER 1500.00 8
MILLER 1300.00 9
WARD 1250.00 10
MARTIN 1250.00 10

ADAMS 1100.00 12
JAMES 950.00 13
SMITH 800.00 14

薪水为3000重复,并列排名第2,跳过第3.

在部内进行薪水从高到低的排名:

SQL> select e.ename,
2 e.sal,
3 e.deptno,
4 rank() over(partition by e.deptno order by e.sal desc) "Rank"
5 from emp e;

ENAME SAL DEPTNO Rank
---------- --------- ------ ----------
KING 5000.00 10 1
CLARK 2450.00 10 2
MILLER 1300.00 10 3
SCOTT 3000.00 20 1
FORD 3000.00 20 1
JONES 2975.00 20 3
ADAMS 1100.00 20 4
SMITH 800.00 20 5
BLAKE 2850.00 30 1
ALLEN 1600.00 30 2
TURNER 1500.00 30 3
MARTIN 1250.00 30 4
WARD 1250.00 30 4
JAMES 950.00 30 6

2.dense_rank函数

dense_rank计算一组值的排名,该排名是连续整数从1开始。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 123 4。

  • 作为一个聚合函数,返回虚拟行在样表中的排名。
  • 作为一个解析函数,返回每一个的排名。

2.1聚合函数语法

2.2解析函数语法

2.3聚合函数的例子

计算假定薪水为2000的员工在样表中的排名。

SQL> select dense_rank(2000) within group(order by e.sal desc) "Rank"
2 from emp e;

Rank
----------
6

假定薪水为2000的员工,按照薪水从高到低在样表中排第7名。

2.4解析函数的例子

按照薪水从高到低进行排名:

SQL> select e.ename,
2 e.sal,
3 dense_rank() over(order by e.sal desc) "Rank"
4 from emp e;

ENAME SAL Rank
---------- --------- ----------
KING 5000.00 1
FORD 3000.00 2
SCOTT 3000.00 2
JONES 2975.00 3

BLAKE 2850.00 4
CLARK 2450.00 5
ALLEN 1600.00 6
TURNER 1500.00 7
MILLER 1300.00 8
WARD 1250.00 9
MARTIN 1250.00 9
ADAMS 1100.00 10

JAMES 950.00 11
SMITH 800.00 12

有两个1250并列排名第8,接着1100是第9。排名是连续是连续的。

在部内进行薪水从高到低的排名:

SQL> select e.ename,
2 e.sal,
3 e.deptno,
4 dense_rank() over(partition by e.deptno order by e.sal desc) "Rank"
5 from emp e;

ENAME SAL DEPTNO Rank
---------- --------- ------ ----------
KING 5000.00 10 1
CLARK 2450.00 10 2
MILLER 1300.00 10 3
SCOTT 3000.00 20 1
FORD 3000.00 20 1
JONES 2975.00 20 2
ADAMS 1100.00 20 3

SMITH 800.00 20 4
BLAKE 2850.00 30 1
ALLEN 1600.00 30 2
TURNER 1500.00 30 3
MARTIN 1250.00 30 4
WARD 1250.00 30 4
JAMES 950.00 30 5

20部门有两个3000并列排名第一,接着2975是第二。排名是连续是连续的。

分享到:
评论

相关推荐

    Oracle开发之分析函数(Rank, Dense_rank, row_number)

    Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...

    oracle函数大全(分类显示).zip_Oracle 函数分类_oracle_oracle函数分类_oracle函数查阅用文档

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的内置函数,以支持复杂的查询和数据操作。这份"oracle函数大全(分类显示).zip"压缩包显然是一份详细的Oracle函数参考手册,对于初学者而言,是一个...

    ORACLE 常用分析函数

    分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述  ROW_NUMBER () OVER([partition_clause]...

    oracle排名函数的使用方法分享

    在oracle中,有rank,dense_rank,row_number,以及分组排名partition。 说明: rank:排名会出现并列第n名,它之后的会跳过空出的名次,例如:1,2,2,4 dense_rank:排名会出现并列第n名,它之后的名次为n+1,例如:1,2,...

    oracle的分析函数汇总

    Rank 函数用于对数据进行排名,包括 Rank、Dense_Rank 和 Row_Number 三种函数。 * Rank 函数:用于对数据进行排名,忽略空值。 * Dense_Rank 函数:用于对数据进行排名,不忽略空值。 * Row_Number 函数:用于对...

    oracle_排列rank()函数

    `RANK()`函数是Oracle数据库中一个强大的工具,能够有效地在一组数据中进行排名操作,尤其是在需要对数据进行分区和排序的情况下。通过理解`RANK()`函数的特性和与其他窗口函数的差异,数据分析师和数据库管理员可以...

    oracle分析函数over_及开窗函数.txt

    本文将详细介绍Oracle中的`OVER`子句以及几种常用的开窗函数,包括`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`和`LAG()`等。 #### 二、基本概念 - **`OVER`子句**:`OVER`子句用于指定分析函数的作用范围,它可以...

    Oracle分析函数

    Oracle 分析函数是 Oracle 数据库中的一种强大功能,能够帮助用户快速进行数据分析和处理。在本文中,我们将对 Oracle 分析函数进行详细的介绍,并对其各个函数进行解释。 一、总体介绍 Oracle 分析函数的语法...

    Oracle排名函数(Rank)实例详解

    在"对比:rank()与dense_rank()"部分,可以看到对于Oracle科目,尽管杨过和李四得分相同,他们都获得了名次1,而张三丰得分最低,获得了名次2,这就是Dense_Rank()的连续排名特性。 在"查询各学生各科排名(分区排名...

    ORACLE_分析函数大全

    除了这些,Oracle分析函数还包括RANK、DENSE_RANK、ROW_NUMBER等排名函数,LEAD和LAG用于获取当前行之前或之后的值,FIRST_VALUE和LAST_VALUE则返回窗口内的第一个或最后一个值,以及NTILE用于将数据分桶等。...

    Oracle_详解分析函数

    1. **等级函数**:如`RANK`, `DENSE_RANK`, `ROW_NUMBER`等,用于对数据进行排序和排名。 2. **窗口函数**:如`SUM`, `COUNT`, `AVG`, `MIN`, `MAX`等,用于在特定的数据窗口上进行统计计算。 3. **报表函数**:与...

    Oracle_分析函数

    使用RANK和DENSE_RANK函数进行分区内的排名计算;使用COUNT函数进行分区内的累计计数。 - 限制返回的行数: 结合窗口函数与WHERE子句来限制每个分区返回的行数。 4. 窗口子句的使用: - RANGE子句:根据偏移量...

    ORACLE_培训之_分析函数

    - **rank()**, **dense_rank()** 和 **row_number()**: 用于排序,分别返回唯一的排名、无间隙的排名和行号。 - **lag()** 和 **lead()**: 提供对当前行前一行或后一行的访问,常用于时间序列分析。 - **rollup()** ...

    Oracle分析函数使用总结

    注意到,当`SUM(AMOUNT)`的值为空时,RANK()和DENSE_RANK()默认将其视为最高排名1(在递减排序中),或者最低排名(在递增排序中)。 如果`SUM(AMOUNT)`中有相同的值,RANK()与DENSE_RANK()的差异就显现出来,前者...

    Oracle分析函数使用的总结.doc

    通过使用这些函数,我们可以根据需要对数据进行分组、排序和排名,从而揭示隐藏的模式和趋势。在实际应用中,这些功能通常与其他SQL语句(如GROUP BY和窗口函数)结合使用,以实现更复杂的数据分析任务。

    oracle ranking function.doc

    本文将详细介绍其中的评级函数,包括RANK()、DENSE_RANK()、PERCENT_RANK()、CUME_DIST()以及NTILE(),并以实际例子解释它们的应用。 1. RANK() 函数: RANK() 函数用于计算数据项在分组中的排名。当有多个记录...

    oracle分组排序统计高级用法

    - **基本语法**: `DENSE_RANK()`函数与`RANK()`类似,但是当出现并列排名时,`DENSE_RANK()`不会跳过任何排名。 ```sql DENSE_RANK() OVER (PARTITION BY <column_list> ORDER BY <sort_column>) ``` - **...

    oracle函数大全-数字-字符-日期-聚合函数

    最后,提供的文档和文本文件,如"oracle日期和时间处理汇总.doc"、"Oracle聚合函数RANK和dense_rank的使用.htm"等,都是极好的学习资源,可以深入研究每个函数的详细信息和示例。通过阅读和实践,你将能够充分利用...

Global site tag (gtag.js) - Google Analytics