MySQL查询每个部门的员工个数(部门员工数可能为0) 您所在的位置:网站首页 mysql岗位 MySQL查询每个部门的员工个数(部门员工数可能为0)

MySQL查询每个部门的员工个数(部门员工数可能为0)

2023-08-25 16:18| 来源: 网络整理| 查看: 265

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的部门 可以看到结果中并没有人数为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了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201218201323466.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhb21lZWNoaWxkcmVu,size_16,color_FFFFFF,t_70

我们需要对外连接查询所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`;

查询结果如下: 一样是27行 这和 在SELECT后跟子查询的方法 得到的结果一致,即现在能通过连接查询得到正确结果了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有