MySQL 查询 : Using group by and getting unreal results

标签 mysql

我正在尝试编写一个查询,但我被卡住了。 以前我有两张表,一张包含工作详细信息,一张包含员工详细信息。现在,我从员工表中取出一列并将其添加到作业表中,导致在尝试使用 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/

相关文章:

php - 删除时间戳最旧的值

php - 在 Laravel 中执行准备好的原始 SQL

php - mysql查询检查大于日期和时间

python - 如何使用 flask 在 Openshift 上安装 mysqldb

mysql - 如何在 my.ini 中将 character_set_database 和 collat​​ion_database 设置为 utf8?

php - 我应该为这个 php/mysql xml 生成 api 使用什么缓存策略/技术

php - 经常使用的 PDO 行数

php - 如何在 PHP 中使用数组进行 MYSQL 查询?

具有两个不同 UNIQUE 约束的 MySQL INSERT

java - 在 Java 中使用从一个类到另一个类的列表中的查询结果