測試表emp

RANK

SQL> select EMPNO,DEPTNO,SAL,
  2  rank()over(partition by DEPTNO order by SAL) "rank"
  3  from emp;

EMPNO     DEPTNO         SAL       rank
---------- ---------- ---------- ----------
      7934        10         1300      1
      7782        10         2450      2
      7839        10         5000      3
      7369        20           800      1
      7876        20         1100      2
      7566        20         2975      3
      7788        20         3000      4
      7902        20         3000      4
      7900       30          950      1
      7654       30        1250      2
      7521       30        1250      2
      7844       30        1500      4
      7499        30         1600      5
      7698        30         2850      6

14 rows selected.

按照deptno分組sal升序排列,這裡注意到deptno=30的sal=1250的兩個僱員,並列在該組中排名第2。然後下一個就是第4名。

What we see here is where two people have the same salary they are assigned the same rank. When multiple rows share the same rank the next rank in the sequence is not consecutive

如果兩個人有相同的salary,就分配相同的排名。多行共享了相同的排名之後,下一個排名在順序上是不連續的。

要和後面的dense_rank(),row_number()區分。

DENSE_RANK

The DENSE_RANK function acts like the RANK function except that it assigns consecutive ranks.

DENSE_RANK函數和RANK函數相似,如果有多個人有相同的salary,會分配same rank,不同之處在于下一個排名在順序上是連續的。

SQL> select EMPNO,DEPTNO,SAL,
  2  dense_rank()over(partition by DEPTNO order by SAL) "rank"
  3  from emp;
     EMPNO     DEPTNO         SAL       rank
---------- ---------- ---------- ----------
      7934        10         1300      1
      7782        10         2450      2
      7839        10         5000      3
      7369        20           800      1
      7876        20         1100      2
      7566        20         2975      3
      7788        20         3000      4
      7902        20         3000      4
      7900        30           950      1
      7654       30        1250      2
      7521       30        1250      2
      7844       30        1500      3
      7499        30         1600      4
      7698        30         2850      5

14 rows selected.

ROW_NUMBER

row_number函數的區別在於,當多個人有相同的salary的時候并不會共享rank,而是連續的分配rank。not same rank,not consecutive

SQL> select EMPNO,DEPTNO,SAL,
  2  row_number()over(partition by DEPTNO order by SAL) "rank"
  3  from emp;
     EMPNO     DEPTNO         SAL       rank
---------- ---------- ---------- ----------
      7934       10        1300      1
      7782       10        2450      2
      7839       10        5000      3
      7369       20         800       1
      7876       20        1100      2
      7566       20        2975      3
      7788       20        3000      4
      7902       20        3000      5
      7900       30         950       1
      7654       30        1250      2
      7521       30        1250      3
      7844       30        1500      4
      7499       30        1600      5
      7698       30        2850      6

14 rows selected.

FIRST and LAST

The FIRST and LAST functions can be used to return the first or last value from an ordered sequence

用於返回first 或者last value

SQL> select EMPNO,DEPTNO,SAL,
  2  min(sal)keep(dense_rank first order by sal )over(partition by DEPTNO) "Lowest",
  3  max(sal)keep(dense_rank last  order by sal )over(partition by DEPTNO) "Highest"
  4  from emp;
     EMPNO     DEPTNO         SAL     Lowest    Highest
---------- ---------- ---------- ---------- ----------
      7782       10        2450       1300      5000
      7839       10        5000       1300      5000
      7934       10        1300       1300      5000
      7566       20        2975         800      3000
      7902       20        3000         800      3000
      7876       20        1100         800      3000
      7369       20         800          800      3000
      7788       20        3000         800      3000
      7521       30        1250         950      2850
      7844       30        1500         950      2850
      7499       30        1600         950      2850
      7900       30         950          950      2850
      7698       30        2850         950      2850
      7654       30        1250         950      2850

14 rows selected.

下面這種寫法,返回結果和上面一樣。
SQL> select EMPNO,DEPTNO,SAL,
  2  min(sal)over(partition by DEPTNO) "Lowest",
  3  max(sal)over(partition by DEPTNO) "Highest"
  4  from emp;
     EMPNO     DEPTNO         SAL     Lowest    Highest
---------- ---------- ---------- ---------- ----------
      7782       10        2450       1300      5000
      7839       10        5000       1300      5000
      7934       10        1300       1300      5000
      7566       20        2975         800      3000
      7902       20        3000         800      3000
      7876       20        1100         800      3000
      7369       20         800          800      3000
      7788       20        3000         800      3000
      7521       30        1250         950      2850
      7844       30        1500         950      2850
      7499       30        1600         950      2850
      7900       30         950          950      2850
      7698       30        2850         950      2850
      7654       30        1250         950      2850

14 rows selected.

2016-04-13

oracle sql rank dense_rank row_number fisrt last的更多相关文章

  1. [转]oracle分析函数Rank, Dense_rank, row_number

    oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 ==================== ...

  2. Oracle分析函数 — rank, dense_rank, row_number用法

    本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course   nva ...

  3. oracle分析函数Rank, Dense_rank, row_number

    http://www.cnblogs.com/wuyisky/archive/2010/02/24/oracle_rank.html 目录=============================== ...

  4. Oracle 的开窗函数 rank,dense_rank,row_number

    1.开窗函数和分组函数的区别 分组函数是指按照某列或者某些列分组后进行某种计算,比如计数,求和等聚合函数进行计算. 开窗函数是指基于某列或某些列让数据有序,数据行数和原始数据数相同,依然能曾现个体数据 ...

  5. rank,dense_rank,row_number使用和区别

    rank,dense_rank,row_number区别 一:语法(用法):     rank() over([partition by col1] order by col2)      dense ...

  6. 【DB2】DB2中rank(),dense_rank(),row_number()的用法

    1.准备测试数据 DROP TABLE oliver_1; ),SUB_NO ),SCORE int); ,,); ,,); ,,); ,,); ,,); ,,); 2.详解rank(),dense_ ...

  7. [z]一个SQL语句分清楚RANK(),DENSE_RANK(),ROW_NUMBER()三个排序的不同

    转自:http://blog.csdn.net/s630730701/article/details/51902762 在SCOTT用户下,执行下面SQL; SELECT s.deptno,s.ena ...

  8. rank() | dense_rank() | row_number() over(PARTITION BY sex order by age desc ) 的区别

    1.row_num() over()函数:根据某个字段排序后编号1,2,3.. select *,ROW_NUMBER() over ( order by majorid) as numfrom St ...

  9. Oracle 排序分析函数之ROW_NUMBER、RANK和DENSE_RANK

    我们都知道分析函数功能很强大,可能需要写很复杂的标准SQL才能办到或不可能办到的事,使用分析函数却能很容易完成.我们经常会用到排序分析函数,如ROW_NUMBER,RANK,DENSE_RANK.这三 ...

随机推荐

  1. python操作memcached以及分布式

    memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件.现在已成为 mixi.Facebook.Live ...

  2. Eclipse不给提示no default proposals

    解决方法: (1),找到工程所在的workspace,删除.metadata配置文件. (2),启动eclipse,重新定位到先前的workspace目录置,重建同名工程(不要删除原来的工程,只要建立 ...

  3. phpcms前台退出登录的时候提示信息'退出成功0'

    问题背景: phpcms前台退出登录的时候,提示了一个退出成功0 让我很困惑为啥有个0呢? 问题分析: 进入 ./phpcms/modules/member/index.php 找到logout方法, ...

  4. 【云计算】docker相关开源项目、工具

    十大基于Docker的开发工具 作者                     郭蕾        发布于     2014年8月19日     |              注意:QCon全球软件开发 ...

  5. An exception occurred during a WebClient request

    System.Net.WebException was caught HResult=-2146233079 Message=An exception occurred during a WebCli ...

  6. C#之设置无边框后如何移动窗体(转)

    转载:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html 第一种,利用windows的消息机制来实现: 首先﹐.定义鼠標左 ...

  7. wxPython+Boa Constructor环境配置

    配置之前先完成eclipse + Pydev的配置环境.详见http://www.cnblogs.com/dflower/archive/2010/05/13/1734522.html 1. 安装 w ...

  8. 在VS中MFC、ATL与WIN32有什么联系或区别?

    有时候遇到一些初学者问我这个问题:在VS中使用MFC和ATL与使用WIN32有什么联系或区别?通俗来说,win32是通过调用windows api去实现需要的功能.而MFC和ATL是封装好的类库,包含 ...

  9. ACM/ICPC 之 四道MST-Prim解法(POJ1258-POJ1751-POJ2349-POJ3026)

    四道MST,适合Prim解法,也可以作为MST练习题. 题意包括在代码中. POJ1258-Agri Net 水题 //Prim-没什么好说的 //接受一个邻接矩阵,求MST //Time:0Ms M ...

  10. java 入门 第二季1

    (1). 类和对象(java 语言是面向对象的) 1). 类是对象的类型 具有相同的属性和方法的一组对象的集合 类:属性和方法 定义类: 类名 属性 方法 //class为关键字 2.定义类时,首字母 ...