zoukankan      html  css  js  c++  java
  • 使用Oracle的分析函数ROW_NUMBER、DENSE_RANK、RANK

     

    这三个分析函数都可以在各个分组内从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

  • 相关阅读:
    vue axios接口封装、Promise封装、简单的axios方法封装、vue接口方法封装、vue post、get、patch、put方法封装
    vue-router 报错、:Avoided redundant navigation to current location 错误、路由重复
    微信小程序支付、小程序支付功能、小程序支付方法、微信小程序支付方法
    微信小程序热更新,小程序提示版本更新,版本迭代,强制更新,微信小程序版本迭代
    微信小程序动态修改title,动态配置title,动态配置头部,微信小程序动态配置头部
    响应式布局rem、rem方法封装、移动端响应式布局
    jquery 选项卡切换、选项卡封装、简单的jquery选项卡封装、tab切换效果
    js获取url并截取相应的字段,js解决url获取中文字段乱码问题
    微信小程序接口封装、原生接口封装、request、promise封装
    20193327《Python程序设计》实验报告三
  • 原文地址:https://www.cnblogs.com/happyday56/p/795832.html
Copyright © 2011-2022 走看看