[英]SQL, COUNT doesn't work in my mysql query
I'm using mysql 5.1. 我正在使用mysql 5.1。
Here is my DB schema 这是我的数据库架构
office
+--------------+----------------+
| office_id | office_name |
+--------------+----------------+
employee
+--------------+-----------------------+------------+
| employee_id | employee_hierarchy_id | office_id |
+--------------+-----------------------+------------+
employee_hierarchy
+-----------------------+-------------------------------+
| employee_hierarchy_id | employee_hierarchy_description|
+-----------------------+-------------------------------+
I want to count the number of employees
group by employee_hierarchy_id
for each office_id
我想group by employee_hierarchy_id
为每个office_id
计算number of employees
group by employee_hierarchy_id
number of employees
Here is my request to list factory_id and employee_hierarchy_id: 这是我列出factory_id和employee_hierarchy_id的请求:
SELECT office_id, employee_hierarchy_id
FROM office, employee_hierarchy
ORDER BY office_id ASC
And if I try to add count, it display only one line: 如果我尝试添加计数,它只显示一行:
SELECT office_id, employee_hierarchy_id, COUNT(*)
FROM office, employee_hierarchy
ORDER BY office_id ASC
add WHERE
consition and GROUP BY
clause 添加WHERE
consition和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
OR the recommended syntax 或推荐的语法
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
UPDATE 1 更新1
if you want to still show records of office even without employee, use LEFT JOIN
, otherwise INNER JOIN
如果你想在没有员工的情况下仍然显示办公室记录,请使用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
I found another way of doing it, try this sub-query 我找到了另一种方法,尝试这个子查询
SELECT SUM(number_of_employees) as 'number of employee per factory',factory_id
FROM (
SELECT COUNT(*) as 'number_of_employees',employee.factory_id
FROM factory,employee
WHERE factory.factory_id = employee.factory_id
GROUP BY employee.employee_hierarchy_id
) AS tmptbl
GROUP BY tmptbl.factory_id
Hope this helps! 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.