为什么在使用 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子句中
我正在尝试计算每个部门(部门 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子句中