MySQL查询每个部门的员工个数(部门员工数可能为0)
MySQL查询每个部门的员工个数现在需要查询每个部门的员工个数。但注意!某些部门可能是没有员工的(员工个数为0),这时候如果简单利用连接查询并分组,将会使得员工个数为0的部门不会被查询出来。SELECT e.department_id,COUNT(*)FROM employees eJOIN departments d ON e.`department_id` = d.`department_id
·
MySQL查询每个部门的员工个数
问题:查询每个部门的员工个数
注意!某些部门可能是没有员工的(员工个数为0)。(事实上是department_id在120之后的那些部门)
这时候如果简单利用连接查询并分组,将会使得员工个数为0的部门不会被查询出来。
SELECT e.department_id,COUNT(*)
FROM employees e
JOIN departments d ON e.`department_id` = d.`department_id`
GROUP BY e.`department_id`;
查询结果如下:
可以看到结果中并没有人数为0的部门
对此,可以利用在SELECT后跟子查询的方法进行查询:
SELECT d.*,(
SELECT COUNT(*)
FROM employees e
WHERE e.department_id = d.`department_id`
) 个数
FROM departments d;
查询结果如下:
此时包含了所有的部门(包括人数为0的)
那么是不是连接查询就不能解决本题呢?
答案是否定的。既然上面的内连接不行,自然想到使用外连接:
SELECT d.*,COUNT(*) 部门人数
FROM departments d
LEFT JOIN employees e ON e.`department_id` = d.`department_id`
GROUP BY d.`department_id`;
查询结果如下:
可以看到还是有问题,员工个数为0的部门此时统计出来员工个数为1了。
我们需要对外连接查询所SELECT的字段做一些改进,“强行”把这些员工人数为0的部门的统计人数纠正为0。修改如下:
SELECT d.*,IF(employee_id IS NULL,0,COUNT(*)) 部门人数
FROM departments d
LEFT JOIN employees e ON e.`department_id` = d.`department_id`
GROUP BY d.`department_id`;
查询结果如下:
这和 在SELECT后跟子查询的方法 得到的结果一致,即现在能通过连接查询得到正确结果了。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献3条内容
所有评论(0)