(图一是部门,图二是部门下的人员,判断一个人是不是在一个部门要用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;
用union分开统计
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)
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