我正在尝试创建一个查询来计算每个部门的员工人数,他们的平均/最小/最高/总SAL
来自表EMP
和SALGRADE
所有{{ 1}}谁是1年级或2年级。这就是我拥有的......
EMPNO
我不确定我是否做对了。特别是只计算1或2年级的人。
答案 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;