【发布时间】:2022-01-22 14:53:57
【问题描述】:
我需要这个问题的帮助
提供一个选择语句,该语句显示: 部门名称、经理姓名、有薪员工人数 高于部门平均水平。
我们在 Scott 和 Tiger 中使用的基本表(emp,dept)我试试这个代码:
select d.dname , count (e.deptno) no_emp
from emp e, dept d
where e.deptno=d.deptno
and
e.sal >( select avg(sal) sal
from emp
where m.deptno=e.deptno
Group by m.deptno)
Group by e.deptno,d.dname
而且我还没有回答完经理的名字没有出现:
| Dname | No_emp |
|---|---|
| ACCOUNTING | 1 |
| RESEARCH | 3 |
| SALES | 2 |
我也试试这个代码:
select d.dname, count(e.deptno) no_emp, e.ename mgr_dept
from emp e, dept d
where e.deptno = d.deptno
and e.ename in
(select ename
from emp
where job=‘MANAGER’ )
And e.sal >
(select avg(sal) sal
from emp
where m.deptno = e.deptno
Group by m.deptno)
Group by e.deptno, d.dname, e.ename
结果不正确:
| DNAME | NO_EMP | MGR_DEPT |
|---|---|---|
| RESEARCH | 1 | JONES |
| SALES | 1 | BLAKE |
【问题讨论】:
-
>> manger 的名称没有出现:查看查询的第一行:
select d.dname , count (e.deptno) no_emp你所要求的只是 dname 和 deptno 的计数(你称之为 no_emp)。您需要将管理器名称列(我猜是 m.ename 之类的)添加到您的查询中。 -
我尝试了,但它没有用,因为我尝试了这个条件 e.job='MANGER' 给我 dept 的经理,它给出的计数等于一个取决于以前的条件
-
select d.dname ,e.ename as mg_dept , count (e.deptno) no_emp from emp e, dept d where e.deptno=d.deptno and e.job='MANGER' and e .sal >( select avg(sal) sal from emp where m.deptno=e.deptno Group by m.deptno) Group by e.deptno,d.dname
-
好的,所以将新查询和您得到的结果添加到您的问题中。接下来,当您自己运行内部查询时会发生什么('select avg(sal)' 和 'group by m.deptno' 之间的所有内容)
-
内部查询的结果是正确的,它给出了每个部门的平均销售量