我正在使用mysql 5.1.
这是我的数据库架构
office
+--------------+----------------+
| office_id | office_name |
+--------------+----------------+
employee
+--------------+-----------------------+------------+
| employee_id | employee_hierarchy_id | office_id |
+--------------+-----------------------+------------+
employee_hierarchy
+-----------------------+-------------------------------+
| employee_hierarchy_id | employee_hierarchy_description|
+-----------------------+-------------------------------+
Run Code Online (Sandbox Code Playgroud)
我想要计算number of employees group by employee_hierarchy_id每一个office_id
这是我列出factory_id和employee_hierarchy_id的请求:
SELECT office_id, employee_hierarchy_id
FROM office, employee_hierarchy
ORDER BY office_id ASC
Run Code Online (Sandbox Code Playgroud)
如果我尝试添加计数,它只显示一行:
SELECT office_id, employee_hierarchy_id, COUNT(*)
FROM office, employee_hierarchy
ORDER BY office_id ASC
Run Code Online (Sandbox Code Playgroud)
添加WHERE意见和GROUP BY条款
SELECT office_id, employee_hierarchy_id, COUNT(*)
FROM office, employee_hierarchy
WHERE office.factory_id = employee_hierarchy.factory_id
GROUP BY office_id, employee_hierarchy_id
ORDER BY office_id ASC
Run Code Online (Sandbox Code Playgroud)
或推荐的语法
SELECT office_id, employee_hierarchy_id, COUNT(*)
FROM office INNER JOIN employee_hierarchy
ON office.factory_id = employee_hierarchy.factory_id
GROUP BY office_id, employee_hierarchy_id
ORDER BY office_id ASC
Run Code Online (Sandbox Code Playgroud)
更新1
如果你想在没有员工的情况下仍然显示办公室记录,请使用LEFT JOIN,否则INNER JOIN
SELECT a.office_name , c.employee_hierarchy_description,
COUNT(b.office_ID) totalCount
FROM office a
LEFT JOIN employee b
ON a.office_ID = b.office_ID
LEFT JOIN employee_hierarchy c
ON b.employee_hierarchy_id = c.employee_hierarchy_id
GROUP BY a.office_name , c.employee_hierarchy_description
ORDER BY totalCount DESC
Run Code Online (Sandbox Code Playgroud)