Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 创建查询以计算每个部门中1级或2级员工的数量_Mysql_Oracle11g - Fatal编程技术网

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

Mysql 创建查询以计算每个部门中1级或2级员工的数量,mysql,oracle11g,Mysql,Oracle11g,我正在尝试创建一个查询,以计算每个部门的员工数量,他们的平均/最小/最大/总SAL来自表EMP和SALGRADE的所有EMPNO一级或二级员工。这就是我所拥有的 SELECT AVG(E.SAL),MIN(E.SAL),MAX(E.SAL),SUM(E.SAL),E.DEPTNO,COUNT(*) FROM EMP E, SALGRADE S WHERE S.GRADE=1 OR S.GRADE=2 GROUP BY E.DEPTNO; 我不确定我做得对不对。特别是只计算1年级或2年级的学

我正在尝试创建一个查询,以计算每个部门的员工数量,他们的平均/最小/最大/总
SAL
来自表
EMP
SALGRADE
的所有
EMPNO
一级或二级员工。这就是我所拥有的

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

我不确定我做得对不对。特别是只计算1年级或2年级的学生。

看起来您需要链接两个表,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;

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

如果我看对了,您将从两个单独的表EMP和SALGRADE查询。您将需要执行某种类型的联接以将表合并在一起。然后在tje上执行聚合。使用GROUPBY子句。假设有一个共同的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;
这个怎么样

选择平均值(E.SAL)、最小值(E.SAL)、最大值(E.SAL)、总和(E.SAL)、E.DEPTNO、计数(*) 来自EMP E,Sals 其中E.SAL介于S.LOSAL和S.HISAL之间,S.GRADE=1或S.GRADE=2
E.DEPTNO分组

这是一个正确的查询。正如@billpennock在他的回答中正确指出的,每个员工的薪资等级已经存在于EMP表中,在这种情况下,您不需要选择“from…,salgrade”。另一个需要澄清的问题:您是否还需要显示工资等级1和2中没有员工的所有部门(因为它们可能存在于部门表中)?avg(sal)、min(sal)、max(sal)设置为null,sum(sal)设置为null或零,count()设置为零?@mrramzansah-你确定吗?琳达:你使用的是Oracle 11g还是MySQL?除非同时使用,否则请编辑您的帖子并删除不适用的标签。(一旦你点击帖子下方的“编辑”链接,你会发现标签部分,你会立即了解如何删除标签。)什么将EMP和SALGRADE联系在一起?
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;