打印本文 打印本文 关闭窗口 关闭窗口
Oracle 9i 分析函数参考手册
作者:武汉SEO闵涛  文章来源:敏韬网  点击数6977  更新时间:2009/4/22 22:03:05  文章录入:mintao  责任编辑:mintao
* 6000 = 5760

SELECT last_name, salary, department_id,
       PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY salary)
       OVER (PARTITION BY department_id) "Percentile_Cont",
       PERCENT_RANK()
       OVER (PARTITION BY department_id ORDER BY salary) "Percent_Rank"
  FROM employees WHERE department_id IN (30, 60);

LAST_NAME                     SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank
------------------------- ---------- ------------- --------------- ------------
Colmenares                      2500            30            3000            0
Himuro                          2600            30            3000          0.2
Tobias                          2800            30            3000          0.4
Baida                           2900            30            3000          0.6
Khoo                            3100            30            3000          0.8
Raphaely                       11000            30            3000            1
Lorentz                         4200            60            5760            0
Austin                          4800            60            5760         0.25
Pataballa                       4800            60            5760         0.25
Ernst                           6000            60            5760         0.75
Hunold                          9000            60            5760            1


PERCENTILE_DISC
功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数CUME_DIST,如果没有正好对应的数据值,就取大于该分布值的下一个值。
注意:本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同

SAMPLE:下例中0.7的分布值在部门30中没有对应的Cume_Dist值,所以就取下一个分布值0.83333333所对应的SALARY来替代

SELECT last_name, salary, department_id,
       PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary )
       OVER (PARTITION BY department_id) "Percentile_Disc",
       CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary)      "Cume_Dist"
  FROM employees
WHERE department_id in (30, 60);

LAST_NAME                     SALARY DEPARTMENT_ID Percentile_Disc  Cume_Dist
------------------------- ---------- ------------- --------------- ----------
Colmenares                      2500            30            3100 .166666667
Himuro                          2600            30            3100 .333333333
Tobias                          2800            30            3100         .5
Baida                           2900            30            3100 .666666667
Khoo                            3100            30            3100 .833333333
Raphaely                       11000            30            3100          1
Lorentz                         4200            60            6000         .2
Austin                          4800            60            6000         .6
Pataballa                       4800            60            6000         .6
Ernst                           6000            60            6000         .8
Hunold                          9000            60            6000          1


RANK
功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDER BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDER BY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。然而,如果两行的确得到同样的排序,则序数将随后跳跃。若两行序数为1,则没有序数2,序列将给组中的下一行分配值3,DENSE_RANK则没有任何跳跃。
SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE_RANK函数的区别)

SELECT d.department_id , e.last_name, e.salary, RANK()
        OVER (PARTITION BY e.department_id ORDER BY e.salary) as drank
  FROM employees e, departments d
WHERE e.department_id = d.department_id
   AND d.department_id IN (''''60'''', ''''90'''');

DEPARTMENT_ID LAST_NAME                     SALARY      DRANK
------------- ------------------------- ---------- ----------
           60 Lorentz                         4200          1
           60 Austin                          4800          2
           60 Pataballa                       4800          2
           60 Ernst                           6000          4
           60 Hunold                          9000          5
           90 Kochhar                        17000          1
           90 De Haan            &

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

打印本文 打印本文 关闭窗口 关闭窗口