oracle日积月累[ZT]-浅析自动连续数或者按目的取数函数RANK(),DENSE_RANK()功能

浅析自动连续数或者按目的取数函数RANK(),DENSE_RANK()功能

有时候我们想自动的计算所列的字段的增加数,确定要查询的在哪一位置
就要用到 rank(),或者DENSE_ rank()函数,下面用例子说明一下,不正之处大家指正


表EMP有字段DEPTNO,ENAME,SAL,下面是不排除相同数的SEQUENTIAL ORDER

SELECT deptno,
            ename,
            sal,
             rank() OVER (PARTITION BY deptno ORDER BY sal) " rank"
FROM   emp
WHERE  deptno = 30;
显示结果如下:
DEPTNO ENAME             SAL       rank
---------- ---------- ---------- ----------
        30 JAMES             950           1
        30 WARD             1250          2
        30 MARTIN           1250          2
        30 TURNER           1500          4
        30 ALLEN             1600           5
        30 BLAKE             2850           6



如果我要的是相同的就算为一个连续数字怎么办??
SELECT deptno,
           ename,
           sal,
            DENSE_ rank() OVER (PARTITION BY deptno ORDER BY sal) " rank"
FROM   emp
WHERE  deptno = 30;

那么结果会如下
DEPTNO ENAME             SAL       rank
---------- ---------- ---------- ----------
        30 JAMES             950            1
        30 WARD             1250           2
        30 MARTIN           1250           2
        30 TURNER           1500          3
        30 ALLEN            1600            4
        30 BLAKE            2850            5



有时候我们需要的是确定一大组数的最小或最大或平均或其他要求
就用以下方法:
SELECT deptno,
           ename,
           sal,
       MIN(sal) KEEP (DENSE_ rank FIRST ORDER BY sal) OVER (PARTITION BY deptno) "Lowest",
       MAX(sal) KEEP (DENSE_ rank LAST ORDER BY sal) OVER (PARTITION BY deptno) "Highest"
FROM   emp
ORDER BY deptno, sal;


结果如下:
    DEPTNO ENAME             SAL     Lowest    Highest
---------- ---------- ---------- ---------- ----------
        10 MILLER           1300       1300       5000
        10 CLARK            2450       1300       5000
        10 KING              5000       1300       5000
        20 SMITH            800         800        3000
        20 ADAMS           1100        800       3000
        20 JONES            2975        800       3000
        20 SCOTT           3000        800       3000
        20 FORD             3000        800        3000
        30 JAMES            950         950         2850
        30 WARD            1250        950       2850
        30 MARTIN          1250        950       2850

    DEPTNO ENAME             SAL     Lowest    Highest
---------- ---------- ---------- ---------- ----------
        30 TURNER           1500        950       2850
        30 ALLEN             1600        950       2850
        30 BLAKE             2850        950       2850
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值