Oracle分析函數PERCENTILE_CONT

來源:互聯網
上載者:User

Oracle分析函數PERCENTILE_CONT

查詢各部門中薪水分布處於25%、50%、75%位置的人的薪水,percent_rank()是確定排行中的相對位置。

create table EMP
(
  EMPNO    NUMBER(4) not null,
  ENAME    VARCHAR2(10),
  JOB      VARCHAR2(9),
  MGR      NUMBER(4),
  HIREDATE DATE,
  SAL      NUMBER(7,2),
  COMM    NUMBER(7,2),
  DEPTNO  NUMBER(2)
);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800.00, null, 20);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600.00, 300.00, 30);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250.00, 500.00, 30);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975.00, null, 20);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250.00, 1400.00, 30);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850.00, null, 30);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450.00, null, 10);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000.00, null, 20);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000.00, null, 10);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500.00, 0.00, 30);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100.00, null, 20);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950.00, null, 30);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000.00, null, 20);
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300.00, null, 10);
commit;

SQL> select e.ename,e.sal,e.deptno,

      percent_rank() over(partition by deptno order by sal desc) p_rank,
      PERCENTILE_CONT(0) within group(order by sal desc)
        over(partition by deptno) max_sal ,
      PERCENTILE_CONT(0.25) within group(order by sal desc)
        over(partition by deptno) max_sal_25,
      PERCENTILE_CONT(0.5) within group(order by sal desc)
        over(partition by deptno) max_sal_50,
      PERCENTILE_CONT(0.75) within group(order by sal desc)
        over(partition by deptno) max_sal_75
    from emp e;
ENAME            SAL    DEPTNO    P_RANK    MAX_SAL MAX_SAL_25 MAX_SAL_50 MAX_SAL_75
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
KING            5000        10          0      5000      3725      2450      1875
CLARK            2450        10        .5      5000      3725      2450      1875
MILLER          1300        10          1      5000      3725      2450      1875
SCOTT            3000        20          0      3000      3000      2975      1100
FORD            3000        20          0      3000      3000      2975      1100
JONES            2975        20        .5      3000      3000      2975      1100
ADAMS            1100        20        .75      3000      3000      2975      1100
SMITH            800        20          1      3000      3000      2975      1100
BLAKE            2850        30          0      2850      1575      1375      1250
ALLEN            1600        30        .2      2850      1575      1375      1250
TURNER          1500        30        .4      2850      1575      1375      1250
WARD            1250        30        .6      2850      1575      1375      1250
MARTIN          1250        30        .6      2850      1575      1375      1250
JAMES            950        30          1      2850      1575      1375      1250
已選擇14行。


SQL> select e.ename,e.sal,e.deptno,
        percent_rank() over(partition by deptno order by sal) p_rank,
        PERCENTILE_CONT(0) within group(order by sal)
          over(partition by deptno) max_sal ,
        PERCENTILE_CONT(0.25) within group(order by sal)
          over(partition by deptno) max_sal_25,
        PERCENTILE_CONT(0.5) within group(order by sal)
          over(partition by deptno) max_sal_50,
        PERCENTILE_CONT(0.75) within group(order by sal)
          over(partition by deptno) max_sal_75
      from emp e;
ENAME            SAL    DEPTNO    P_RANK    MAX_SAL MAX_SAL_25 MAX_SAL_50 MAX_SAL_75
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
MILLER          1300        10          0      1300      1875      2450      3725
CLARK            2450        10        .5      1300      1875      2450      3725
KING            5000        10          1      1300      1875      2450      3725
SMITH            800        20          0        800      1100      2975      3000
ADAMS            1100        20        .25        800      1100      2975      3000
JONES            2975        20        .5        800      1100      2975      3000
SCOTT            3000        20        .75        800      1100      2975      3000
FORD            3000        20        .75        800      1100      2975      3000
JAMES            950        30          0        950      1250      1375      1575
MARTIN          1250        30        .2        950      1250      1375      1575
WARD            1250        30        .2        950      1250      1375      1575
TURNER          1500        30        .6        950      1250      1375      1575
ALLEN            1600        30        .8        950      1250      1375      1575
BLAKE            2850        30          1        950      1250      1375      1575
已選擇14行。

Oracle 單一實例 從32位 遷移到 64位 方法 

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

Oracle匯入匯出expdp IMPDP詳解

Oracle 10g expdp匯出報錯ORA-4031的解決方案

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.