1.rank函数

rank计算一组值的排名,返回数字类型。排名可能是不连续。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 1 3 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 1 2 3 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排名函数的更多相关文章

  1. oracle rank()和dense_rank(), row_number() 的区别

    转自:http://www.linuxidc.com/Linux/2015-04/116349.htm 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成 ...

  2. 在MySQL中实现Rank高级排名函数【转】

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...

  3. 在MySQL中实现Rank高级排名函数

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...

  4. MySQL实现SQL Server排名函数

    最近在MySQL中遇到分组排序查询时,突然发现MySQL中没有row_number() over(partition by colname)这样的分组排序.并且由于MySQL中没有类似于SQL Ser ...

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

    这篇文章主要介绍了Oracle排名函数(Rank)实例详解,需要的朋友可以参考下     --已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应 ...

  6. SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较

    排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: .row_number .rank .dense_rank .ntile 下面分别介绍一下这四个 ...

  7. 好用的排名函数~ROW_NUMBER(),RANK(),DENSE_RANK() 三兄弟

    排名函数三兄弟,一看名字就知道,都是为了排名而生!但是各自有各自的特色!以下一个例子说明问题!(以下栗子没有使用Partition By 的关键字,整个结果集进行排序) RANK 每个值一个排名,同样 ...

  8. 四个排名函数(row_number、rank、dense_rank和ntile)的比较

    排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: 1.row_number 2.rank 3.dense_rank 4.ntile 下面分别介绍一 ...

  9. Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

    排名函数是Sql Server2005新增的功能,下面简单介绍一下他们各自的用法和区别.我们新建一张Order表并添加一些初始数据方便我们查看效果. CREATE TABLE [dbo].[Order ...

随机推荐

  1. 从零開始开发Android版2048 (四) 分数、重置、结束

    这一篇的内容主要是在上一篇的基础上,增加分数计算(包含当前分数和最高分数).游戏结束的推断以及游戏界面的重置这三个部分的功能. 一.分数的计算和保存          首先,2048这个游戏的分数包含 ...

  2. uva 816 - Abbott's Revenge(有点困难bfs迷宫称号)

    是典型的bfs,但是,这个问题的目的在于读取条件的困难,而不是简单地推断,需要找到一种方法来读取条件.还需要想办法去推断每一点不能满足条件,继续往下走. #include<cstdio> ...

  3. urlrewrite 匹配规则之优先选择

    urlrewrite rule可以使用java的正则表达式匹配规则,但是这里存在一个问题点,假如有一个通配的规则和一个精确匹配的规则,urlrewrite 会选择那个去匹配呢? 如下两种规则: < ...

  4. APP迁移

    APP架子迁移 在完成上一篇之后,断断续续的开始重构我的Android项目代码,现在终于完成了.在重构期间又仔细阅读了一些开源项目的源码及文章,并询问了一些大神思路,按照理解自己完成了MVP结构的重构 ...

  5. mysql启动的四种方式

    mysql的四种启动方式: .mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --def ...

  6. [Boost]boost的时间和日期处理-(2)时间的操作

    <开篇> 本篇紧接着boost上篇叙述Boost::DateTime的时间处理.在C++中,常见的时间有time_t, FILETIME和tm,而boost中用ptime. 构造ptime ...

  7. 织梦sitemap模板获取文章列表

    分析了一下makehtml_map.php?dopost=site这个文件,发现生成视图用的是dedetag.class.php文件,有点简单.不能使用织梦的很多标签,例如: {dede:arclis ...

  8. BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整( dp )

    最优的做法最后路面的高度一定是原来某一路面的高度. dp(x, t) = min{ dp(x - 1, k) } + | H[x] - h(t) | ( 1 <= k <= t ) 表示前 ...

  9. getAttribute()获取属性

    Js:getAttribute[转] 一份文档就是一棵节点树. ●节点分为不同的类型:元素节点.属性节点和文本节点等. ●getElementById()方法将返回一个对象,该对象对应着文档里的一个特 ...

  10. C#2.0--集合--转载车老师

    集合在编程的过程中用的是非常的多,如GridViewRowCollection.ConnectionStringSettingsCollection.NameValueCollection等等.一般来 ...