如何解决如何同时检索每个部门的前3名最高工资和前3名最低工资
我想知道是否可以使用 sql oracle 或 MysqL 在输出中并排显示来自每个部门的前 3 名最高薪水员工以及同一部门的最低 3 名薪水员工。我尝试使用分析函数和相关子查询方法,但只能获得最高或最低但不能同时获得。对此的任何见解将不胜感激。
DDL 和 DML:
CREATE TABLE "EMP" ( "EMPNO" NUMBER(4,0),"ENAME" VARCHAR2(10 BYTE),"JOB" VARCHAR2(9 BYTE),"MGR" NUMBER(4,"HIREDATE" DATE,"SAL" NUMBER(7,2),"COMM" NUMBER(7,"DEPTNO" NUMBER(2,CONSTRAINT "PK_EMP" PRIMARY KEY
( "EMPNO" )
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7839,'KING','PRESIDENT',null,to_date('17-11-81','DD-MM-RR'),5000,10);
Insert into EMP (EMPNO,DEPTNO) values (8967,'SCott','ANALYST',7566,to_date('27-12-19',3000,DEPTNO) values (7782,'CLARK','MANAGER',7839,to_date('09-06-81',2450,DEPTNO) values (7934,'MILLER','CLERK',7782,to_date('23-01-82',1300,DEPTNO) values (7902,'FORD',to_date('03-12-81',20);
Insert into EMP (EMPNO,DEPTNO) values (8900,DEPTNO) values (7788,to_date('19-04-87',DEPTNO) values (7566,'JOnes',to_date('02-04-81',2975,DEPTNO) values (7876,'AdamS',7788,to_date('23-05-87',1100,DEPTNO) values (7369,'SMITH',7902,to_date('17-12-80',800,DEPTNO) values (7698,'BLAKE',to_date('01-05-81',2850,30);
Insert into EMP (EMPNO,DEPTNO) values (7499,'ALLEN','SALESMAN',7698,to_date('20-02-81',1600,DEPTNO) values (7844,'TURNER',to_date('08-09-81',1500,DEPTNO) values (7654,'MARTIN',to_date('28-09-81',1250,DEPTNO) values (7521,'WARD',to_date('22-02-81',DEPTNO) values (7900,'JAMES',950,30);
解决方法
一种解决方案是:
WITH t AS
(SELECT e.*,DENSE_RANK() OVER (PARTITION BY DEPTNO ORDER BY sal DESC) AS sal_desc,DENSE_RANK() OVER (PARTITION BY DEPTNO ORDER BY sal ASC) AS sal_ASC
FROM EMP e)
SELECT *
FROM t
WHERE sal_desc <= 3 OR sal_ASC <= 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。