哥不迷信但哥迷人
2019-05-19 16:51
采纳率: 16.7%
浏览 1.6k

如何用一条SQL统计出部门,单位,部门下的人数,统计出的人数包括没有人的部门

图片说明
图片说明

(图一是部门,图二是部门下的人员,判断一个人是不是在一个部门要用apartment和unit_name双主键来判断)
下方是两个表结构:

personUnit是部门表

CREATE TABLE `person_unit` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `apartment` varchar(255) DEFAULT NULL,
  `num` int(11) DEFAULT NULL,
  `unit_name` varchar(255) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `cup_num` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=214 DEFAULT CHARSET=utf8;

下方是人员表(f_user)

CREATE TABLE `f_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `comment` varchar(255) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `face_id` varchar(255) DEFAULT NULL,
  `id_card` varchar(255) DEFAULT NULL,
  `is_deploy` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `photo` varchar(255) DEFAULT NULL,
  `photo_url` varchar(255) DEFAULT NULL,
  `unit_name` varchar(255) DEFAULT NULL COMMENT '所属单位',
  `update_date` datetime DEFAULT NULL,
  `work_num` varchar(255) DEFAULT NULL COMMENT '工号',
  `apartment` varchar(255) DEFAULT NULL COMMENT '所属部门',
  `position` varchar(255) DEFAULT NULL,
  `user_id` varchar(255) DEFAULT NULL,
  `phone_num` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `unit_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • ghq-yes 2019-05-20 07:11

    用union分开统计

    打赏 评论
  • 老铁咖啡 2019-05-20 10:47
    
    SELECT p.unit_name  as '单位',u.apartment as '部门', COUNT(u.id) as '部门人数'
    FROM person_unit p, f_user u
    WHERE p.id = u.unit_id GROUP BY u.apartment
    UNION
    SELECT p.unit_name,p.apartment, 0
    FROM person_unit p
    WHERE p.apartment not in (SELECT DISTINCT(u.apartment) from f_user u)
    
    
    

    图片说明
    图片说明
    图片说明

    打赏 评论
  • net_xavi 2019-05-20 12:39

    SELECT p.unit_name as '单位',u.apartment as '部门', sum(case when u.id is null then 0 else 1 end) as '部门人数'
    FROM person_unit p
    left join f_user u on p.unit_name = u.unit_name and p.apartment = u.apartment
    GROUP BY p.unit_name, u.apartment

    打赏 评论