您的位置:首页 > 数据库 > Oracle

oracle分析函数浅析

2004-08-27 01:19 507 查看
DENSE_RANK(),RANK()区别
说明:DENSE_RANK(),RANK()是oracle自带的分析函数,经常被用于在分组后的组内对某一字段的建立序列的方法,它们的区别在于相同字段值的处理不同

范例:

select deptno,cname,sal,
 dense_rank()
  over (partition by deptno
   order by sal desc) dr,
 rank()
  over (partition by deptno
   order by sal desc) r
 from emp
 order by deptno,sal desc
/

结果:

    DEPTNO ENAME             SAL         DR          R
---------- ---------- ---------- ---------- ----------
        10 KING             5000          1          1
        10 CLARK            2450          2          2
        10 MILLER           1300          3          3
        20 SCOTT            3000          1          1
        20 FORD             3000          1          1
        20 JONES            2975          2          3
        20 ADAMS            1100          3          4
        30 BLAKE            2850          1          1
        30 TURNER           1500          2          2
        30 WARD             1250          3          3
        30 MARTIN           1250          3          3
        30 JAMES             950          4          5
        30 ALLEN             600          5          6

分析函数中WINDOWS子句

RANGE
分析的字段必须是日期或数字型,根据当前分析行值进行比较、运算
ROWS
字段可以是任意类型,是行的物理数

WINDOWS子句中的sepcific 字句

UNBOUNDED PRECEDING
排序后从当前分区的第一行开始,结束与正在处理的当前行
CURRENT ROW
从当前行开始(并结束)
NUMERIC EXPRESSION PRECEDING
排序后从当前行之前的数字表达式开始
NUMERIC EXPRESSION FOLLOWING
排序后从当前行直到当前行之后的数字表达式结束
BETWEEN NUMERIC EXPRESSION1 AND NUMERIC EXPRESSION2 FOLLOWING
在以当前行为基准,两个数字的范围内
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle windows