繁体   English   中英

oracle SQL:通过最小和最大和获得DEPT

[英]oracle SQL : getting DEPT by min and max sums

我有2个工作子查询,用于检查所有部门中的最小和最大SUMS(DEPTNO)。 表EMP和DEPT具有DEPTNO单元格

(SELECT min(sum(e.SAL)) FROM EMP e GROUP by e.DEPTNO);
(SELECT max(sum(e.SAL)) FROM EMP e GROUP by e.DEPTNO);

如何检查最小和最大子查询的DEPTNO? 我的代码有错误:

SELECT d.DEPTNO 
FROM DEPT d 
WHERE sum(e.SAL) = (SELECT max(sum(e.SAL)) FROM EMP e GROUP by d.DEPTNO);

如果您希望部门获得最大的总和,则可以使用rownumrow_number()

select ed.*
from (select e.deptno, sum(e.sal) as sums,
             row_number() over (order by sum(e.sal) desc) as seqnum
      from emp e
      group by e.deptno
     ) ed
where seqnum = 1;

在Oracle 12g +中,也可以写成:

      select e.deptno, sum(e.sal) as sums,
             row_number() over (order by sum(e.sal) desc) as seqnum
      from emp e
      group by e.deptno
      order by sum(e.sal) desc
      fetch first 1 row only;

这是使用cte一种方法

with salsums as (select deptno, sum(sal) salsum from emp group by deptno)
, maxandmin as (select max(salsum) maxsal, min(salsum) minsal from salsums)
select deptno 
from salsums cross join maxandmin
where salsum = maxsal or salsum = minsal

好的,这比开始时要难。 这就是我最终使它工作的方式,但是我更喜欢@vkp的答案。

with sums as
(
  SELECT DEPTNO, SUM(SAL) AS SSAL
  FROM EMP
  GROUP BY DEPTNO
), mm as
(
  SELECT DEPTNO, SSAL, MIN(SSAL) OVER () as MIN_SSAL, MAX(SSAL) OVER () as MAX_SSAL
  FROM SUMS
)
SELECT 'MIN', DEPTNO, SSAL FROM mm WHERE SSAL=MIN_SSAL
UNION ALL
SELECT 'MAX', DEPTNO, SSAL FROM mm WHERE SSAL=MAX_SSAL

http://sqlfiddle.com/#!6/410c8/8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM