BREAK ON DEPTNO SKIP 1
compute sum of sal on deptno
SELECT deptno, empno, ename,sal FROM
(SELECT deptno, empno, ename, sal FROM emp )
WHERE EXISTS (SELECT deptno FROM dept) order by 1,2 , sal desc ;
如何从emp获得两个最高的sal,以及我的代码有什么问题?
答案 0 :(得分:2)
如果您希望每个部门的所有行具有两个最高的不同工资,请按以下方式使用dense_rank()
:
select deptno, empno, ename, sal
from (select e.*,
dense_rank() over (partition by deptno, order by sal desc) as seqnum
from emp e
) e
where seqnum <= 2
order by deptno, sal desc;
看起来问题会被删除,但也可能有正确的答案。
答案 1 :(得分:1)
你想要的并不完全清楚。在标题中你说&#34;两个最高薪水&#34;,但在评论中你提到了一些关于总和的事情。
以下将显示两个最高薪水。如果有多个&#34;最高&#34;所有工资都将显示
select deptno, empno, ename, sal
from (
SELECT deptno, empno, ename, sal,
dense_rank() over (order by sal desc) as rnk
FROM emp
)
where rnk <= 2
order by sal desc;
要获得每个部门的这个,您可以使用:
select deptno, dept_salary
from (
select deptno, dept_salary,
dense_rank() over (order by dept_salary desc) as rnk
from (
SELECT deptno, sum(sal) as dept_salary
FROM emp
group by deptno
) t1
) t2
where rnk <= 2
order by dept_salary desc
答案 2 :(得分:0)
实际上是简单查询:
SELECT deptno, empno, ename,sal FROM emp eb
WHERE (deptno, empno) IN
(SELECT depno, empno FROM
(SELECT deptno, empno FROM emp ei
WHERE ei.deptno = eb.deptno
ORDER BY ei.sal DESC
) WHERE rownum <= 2
);
最后WHERE rownum <=2
不同于SQL到SQL,在Mysql中你需要LIMIT 2
,在MSSQL Server中,你需要在Oracle SELECT TOP 2
中进行WHERE rownum <= 2
。取决于您使用的引擎。