我正在尝试编写一个查询,但我被卡住了。
以前我有两张表,一张包含工作详细信息,一张包含员工详细信息。现在,我从员工表中取出一列并将其添加到作业表中,导致在尝试使用 group by
编写查询时出现不真实的结果。
我的查询:
SELECT SAL, COUNT(COMM), COUNT(EMPNO) FROM EMPLOYEE, JOB GROUP BY JOBCODE;
输出:
+---------+-------------+--------------+
| SAL | COUNT(COMM) | COUNT(EMPNO) |
+---------+-------------+--------------+
| 3000.00 | 4 | 12 |
| 3000.00 | 4 | 4 |
| 3000.00 | 0 | 4 |
+---------+-------------+--------------+
虽然它应该是:
+---------+-------------+--------------+
| SAL | COUNT(COMM) | COUNT(EMPNO) |
+---------+-------------+--------------+
| 3000.00 | 1 | 3 |
| 1800.00 | 1 | 1 |
| 2000.00 | 0 | 1 |
+---------+-------------+--------------+
基本上,对于每个 JOB
,我获得的 COMM
人数是 4 倍,而 EMPLOYEE
人数是 4 倍。另外,我只获得了三个 SAL
最佳答案
您的问题不仅仅是GROUP BY
,而是JOIN
——或者缺少它。
非常简单的规则:永远不要在FROM
子句中使用逗号。 始终使用正确、明确的JOIN
语法:
SELECT JOBCODE, AVG(SAL), COUNT(COMM), COUNT(EMPNO)
FROM EMPLOYEE e JOIN
JOB j
ON e.?? = j.??
GROUP BY JOBCODE;
您的问题没有提供足够的信息来指定表之间正确的 JOIN
条件。
当您执行GROUP BY
某些操作时,所有其他列都应该具有聚合函数。
关于MySQL 查询 : Using group by and getting unreal results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521795/