`
一笑_奈何
  • 浏览: 66861 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle的几个排序函数 ROW_NUMBER()/DENSE_RANK()/RANK()

阅读更多
今天看到有位同事的sql中使用了“RANK() over partition BY order by  ”的语句,以前自己没使用过,

将百度结果也一并保存下来以备忘。



sql 原文:

SELECT *
  FROM
  (SELECT BC.SECUCODE 债券代码,
               BC.CHINAME 债券名称,
               TO_CHAR(BC.LISTEDDATE, 'yyyy-mm-dd') 债券上市日期,
               BC.ISSUER 发行人,
               RANK() over(partition BY BC.ISSUER order by BC.LISTEDDATE DESC) RANK_NO
      FROM
      (SELECT DISTINCT JBC.MAINCODE,
                    JBC.CHINAME,
                    JBC.ISSUER,
                    JBC.SECUCODE SECUCODE,
                    JBC.LISTEDDATE LISTEDDATE
            FROM ABC.BOND_CODE JBC
            WHERE TRIM(JBC.ISSUER) NOT IN
                 (SELECT DISTINCT TRIM(JLS.CHINAME)
                    FROM JUYUAN.LC_STOCKARCHIVES JLS)
      ) BC
   )
WHERE rank_no <= 3







百度查询资料:



oracle的几个排序函数



ref url:http://blog.csdn.net/lky5387/archive/2009/12/09/4972512.aspx



rank 根据order by排名 会出现并列排名。下一个值会跳过并列值 比如 1 2 2 4 5
通常对应rank还有 desc_rank 出现并列排名以后,下一个值不跳过并列值 1 2 2 3 4
row_number 就是直接排出一个名次。不会出现并列排名 1 2 3 4 5


这三个分析函数都可以在各个分组内从1开始排序。
ROW_NUMBER()是没有重复值的,可以利用它实现分页显示。


DENSE_RANK()是连续排序,有两个第二名时仍然跟着第三名。


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




SELECT * FROM (
     SELECT deptno, ename, sal, ROW_NUMBER()
     OVER (
       PARTITION BY deptno ORDER BY sal DESC
     ) Top3 FROM emp
)
WHERE Top3 <= 3
/

    DEPTNO ENAME                SAL          TOP3
---------- ---------- ---------- ----------
           10 KING                   5000             1
           10 CLARK               2450             2
           10 MILLER              1300             3

           20 SCOTT               3000             1
           20 FORD                 3000             2
           20 JONES                2975             3

           30 BLAKE               2850             1
           30 ALLEN               1600             2
           30 TURNER            1500             3

9 rows selected.



SELECT * FROM (
     SELECT deptno, ename, sal, DENSE_RANK()
     OVER (
       PARTITION BY deptno ORDER BY sal DESC
     ) TopN FROM emp
)
WHERE TopN <= 3
ORDER BY deptno, sal DESC
/

       DEPTNO ENAME                SAL          TOPN
---------- ---------- ---------- ----------
           10 KING                  5000             1
           10 CLARK               2450             2
           10 MILLER              1300             3

          20 SCOTT               3000             1     <--- !
          20 FORD                3000             1     <--- !
           20 JONES               2975             2
           20 ADAMS              1100             3

           30 BLAKE               2850             1
           30 ALLEN               1600             2
           30 TURNER            1500             3


10 rows selected.



SELECT * FROM (
     SELECT deptno, ename, sal, RANK()
     OVER (
       PARTITION BY deptno ORDER BY sal DESC
     ) TopN FROM emp
)
WHERE TopN <= 3
ORDER BY deptno, sal DESC
/

       DEPTNO ENAME                SAL          TOPN
---------- ---------- ---------- ----------
           10 KING                   5000             1
           10 CLARK               2450             2
           10 MILLER              1300             3

          20 SCOTT               3000            1     <--- !
          20 FORD                 3000           1     <--- !
           20 JONES               2975            3

           30 BLAKE               2850             1
           30 ALLEN               1600             2
           30 TURNER            1500             3
分享到:
评论

相关推荐

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

    本文主要是对Oracle分析函数Rank, Dense_rank, row_number的使用法,通过这些函数,我们可以对数据进行排序和分组,需要的朋友可以参考下。

    ORACLE 常用分析函数

     ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值所在行的序列值相同,但其后的序列值从...

    Oracle_详解分析函数

    排序用Rank, Dense_rank, row_number 1.带空值的排列 2.Top/Bottom N查询 3.First/Last排名查询 4.按层次查询 1.窗口函数简介 2.窗口函数示例-全统计 3.窗口函数进阶-滚动统计(累积/均值) 4.窗口函数进阶-根据时间...

    深入探讨:oracle中row_number() over()分析函数用法

    row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据... rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()也是连续排序,有两个第二名时仍然跟

    深入浅出Oracle分析函数

    目录 Oracle开发专题之:分析函数(OVER) Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) Oracle开发专题之:分析函数3(Top/Bottom N、First/Last、NTile) Oracle开发专题之:窗口函数 ...

    包含了所有的oracle函数文档

    Oracle 函数分类 :单行函数 ...序号跳过相应的数值 row_number() 每行返回唯一排序值 dense_rank() 相同值排位相同 序号是连续的这些也就是我们说的伪列日期函数主要为 一些 象Add_months,last_day round 等等数字函数

    oracle分析函数,窗口函数,报表函数

    oracle分析函数,窗口函数,报表函数 分析函数(OVER) 分析函数2(Rank, Dense_rank, row_number) 分析函数3(Top/Bottom N、First/Last、NTile)

    oracle 分析函数详解(有例子)

    2 Oracle开发专题之:分析函数 Rank Dense rank row number 3 Oracle开发专题之:分析函数3 Top Bottom N First Last NTile 4 Oracle开发专题之:窗口函数 5 Oracle开发专题之:报表函数 6 Oracle开发专题之:...

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

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

    oracle分析函数在BI分析中应用事例

    聚合函数可以是:sum,count,avg,max,min,first_value,last_value,rank,dense_rank ,row_number, ratio_to_report Over不能单独使用,用来制定数据窗口大小 Partition by表示分类数据集合,在此集合上的运算 Order by...

    oracle高级函数说明

    包含Oracle常用的高级函数,比如取前N名,每个分组的前N名等。 详细介绍Oracle分析函数(OVER、Rank、Dense_rank、row_number、Top/Bottom N、First/Last、NTile) ,窗口函数,报表函数

    oracle-10G函数大全.chm

    1,数值型函数(abs()、sign()、ceil()、floor()、power()、exp()、round()...);...6,分析函数(sum(...) over(...)、dense_rank、row_number()、lag()...); 7,其它函数(decode()、nvl()、nvl2()、least()...);

    Oracle 分析函数.doc

    Oracle 分析函数详解 1. 自动汇总函数rollup,cube, 2. rank 函数, rank,dense_rank,row_number 3. lag,lead函数 4. sum,avg,的移动增加,移动平均数 5. ratio_to_report报表处理函数 6. first,last取基数的分析函数

    oracle分组排序统计高级用法

    oracle如何实现分组排序和统计、聚集,如何分组求top N,什么是over分析函数,row_number(),rank(),dense_rank()区别又是什么, 如何找到一条记录的前后值,这份文档写得太好了。

    Oracle分析函数

    ROW_NUMBER :返回有序组中一行的偏移量,从而可用于按特定标准排序的行号 ------------------------------------------------------------------------------------------------- STDDEV :计算当前行关于组的标准...

    Oracle分析函数中文+英文【英文非中文的配套】

    1、oracle分析函数 中文: 主要含: rank() 和 dense_rank() first_value()和last_value() row_number() LAG() range开窗函数 2、oracle分析函数 英文: 比较详细

    深入浅出oracle分析函数(全)

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

    Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

    在前面《Oracle开发之分析函数(Rank、Dense_rank、row_number)》一文中,我们已经知道了如何为一批记录进行全排列、分组排列。假如被排列的数据中含有空值呢? 代码如下:SQL&gt; select region_id, customer_id,  ...

    oracle常用分析函数与聚合函数的用法

    一、几个排名函数的语法和用法:  rank ( ) over ([partition by col] order by col ) dense_rank ( ) over ([partition by col] order by col ) rownumber ( ) over ( [partition by col] order by col ) ...

Global site tag (gtag.js) - Google Analytics