为什么在使用 group by 子句时得到总计数?

Why do I get total count while using a group by clause?

我正在尝试计算每个部门(部门 table)的员工(来自员工 table) 我的方法是

SELECT d.division, COUNT (first_name) 
FROM departments d, employees
GROUP BY d.division

我收到所有 (1000) 名员工的总数乘以相同部门(不同部门)的数量,例如如果 'Hardware' 部门有 'Automotive' 和 'Tools' 个部门,我得到 2000 的计数。

在一个 table 内计算它很好(部门都在 'employees' 和 'departments' table 内)

SELECT department, COUNT (first_name) 
FROM employees
GROUP BY department

{刚入门,自己学习反馈的途径不多}

SELECT d.division, COUNT (e.first_name) 
 FROM departments d 
 JOIN employees e on d.id=e.department_id
GROUP BY d.division

这个FROM departments d, employees的构造是两个表之间的一个“cross-join”

您的查询指定

FROM departments, employees

但缺少 WHERE 子句,因此没有什么可以限制每个部门只计算特定部门的员工,而是包括 every 员工 个分区(参见cross join)。

使用现代连接语法,指定如何通过 ON 关键字进行连接,选择 LEFT(即 outer)连接,这样划分就没有仍然返回任何员工(计数为 0):

SELECT
    division,
    COUNT (first_name) as employee_count
FROM departments d 
LEFT JOIN employees e ON e.department_id = d.id
GROUP BY division

缺少where子句,将部门与员工的关系放在where子句中