创建查询以计算每个部门1级或2级的员工人数

时间:2016-11-27 17:13:08

标签: mysql oracle11g

我正在尝试创建一个查询来计算每个部门的员工人数,他们的平均/最小/最高/总SAL来自表EMPSALGRADE所有{{ 1}}谁是1年级或2年级。这就是我拥有的......

EMPNO

我不确定我是否做对了。特别是只计算1或2年级的人。

3 个答案:

答案 0 :(得分:1)

看起来您需要链接两个表,emp和salgrade。如果没有join子句,您将在过滤器之前的两个表之间获得一个笛卡尔连接(其中一行包含另一行的所有行)。

select avg(e.sal),min(e.sal),max(e.sal),sum(e.sal),e.deptno, count(*) 
from emp e join salgrade s on e.<foreign key value> = s.<primary key value>
where s.grade in (1,2) 
group by deptno;

当然是salgrade的关键值是数字然后你根本不需要加入它,因为你没有从中选择任何值

select avg(e.sal),min(e.sal),max(e.sal),sum(e.sal),e.deptno, count(*) 
from emp e 
where e.grade in (1,2) 
group by deptno; 

如果它解决了您的问题,请将此标记为答案

答案 1 :(得分:-1)

如果我看到这个,你正在从两个单独的表EMP和SALGRADE中查询。您需要执行某种连接才能将表格组合在一起。然后在结果连接上执行聚合。使用Group By子句。假设有一个共同的ID来加入它们,它可能看起来像这样:

SELECT 
AVG(E.SAL),MIN(E.SAL),MAX(E.SAL),SUM(E.SAL),E.DEPTNO,COUNT(*) 
FROM EMP E
INNER JOIN (SELECT * FROM SALGRADE WHERE GRADE = 1 OR GRADE = 2) S
ON E.ID = S.ID
GROUP BY E.DEPTNO;

答案 2 :(得分:-1)

这个怎么样?

SELECT AVG(E.SAL),MIN(E.SAL),MAX(E.SAL),SUM(E.SAL),E.DEPTNO,COUNT(*) 来自EMP E,SALGRADE S. S.SAL在S.SOSAL和S.HISAL和S.GRADE之间的关系= 1或S.GRADE = 2 GROUP BY E.DEPTNO;