查询各部门中薪水分布处于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行。

Logo

一站式 AI 云服务平台

更多推荐