簡體   English   中英

選擇員工工資總和大於所有部門平均工資的部門名稱

[英]Select the dept names where the sum of their employees' salaries is greater than the average of all departments'

我們有包含列 empno、ename、job、mgr、hiredate、sal、comm、deptno 的表 emp 和包含列 deptno、dname、loc 的表部門

我們正在選擇員工工資總和大於所有部門的平均工資總和的 dname

我不熟悉在單個查詢中使用多個 SELECT,這是我嘗試的:

SELECT d.dname FROM emp e
JOIN dept d ON e.deptno = d.deptno
GROUP BY d.deptno HAVING SUM(e.sal) >
                        (SELECT AVG(sal) FROM emp
                        GROUP BY deptno)

給出第二個選擇返回多行的錯誤,當我試驗時,我沒有找到匹配正確單行的方法

你如何選擇正確的 dnames?

您可以使用avg()over()窗口函數來獲得部門明智的工資總和的平均值。 然后在 cte 中使用它並只選擇工資總和大於總和的平均值的部門。

架構和惰性語句:

 create table emp(empno varchar(100), ename varchar(100), job varchar(100), mgr varchar(100), hiredate date, sal int, comm int, deptno varchar(100));
 insert into emp values('e01','Adam',null,null,'01-01-2021',10000,null,'D01');
 insert into emp values('e02','Zaid',null,null,'01-01-2021',12000,null,'D01');
 insert into emp values('e03','Noor',null,null,'01-01-2021',20000,null,'D02');
 insert into emp values('e04','Seth',null,null,'01-01-2021',12000,null,'D03');

 create table dept (deptno varchar(100),dname varchar(100));
 insert into dept values('D01','HR');
 insert into dept values('D02','IT');
 insert into dept values('D03','Sales');

詢問:

 with cte as
 ( 
   SELECT deptno, SUM(sal) AS salary_sum  ,avg(sum(sal))over() salary_average
   FROM   emp
   GROUP BY deptno
 )
 select *
 from cte c inner join dept d 
 on c.deptno=d.deptno
 where salary_sum>salary_average

輸出:

部門 工資總和 平均工資 部門 名稱
D01 22000 18000.000000000000 D01 人力資源
D02 20000 18000.000000000000 D02

db<> 在這里擺弄

您的子查詢返回每個部門的平均工資而不是工資總和的平均值:

SELECT d.dname FROM emp e
JOIN dept d ON e.deptno = d.deptno
GROUP BY d.deptno HAVING SUM(e.sal) >
                        (SELECT AVG(s) 
                         FROM   (SELECT SUM(sal) AS s  
                                 FROM   emp
                                 GROUP BY deptno) t
                        )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM