常用语法:
sum(case 属性名 when 属性值1 then 1 else 0 end),意思就是某个属性下为属性值1就加1个数量,否则就作0统计。
数据准备:
INSERT INTO notice_person (id, notice_edu) VALUES (1, '小学');
INSERT INTO notice_person (id, notice_edu) VALUES (2, '初中');
INSERT INTO notice_person (id, notice_edu) VALUES (3, '初中');
INSERT INTO notice_person (id, notice_edu) VALUES (5, '大学本科');
INSERT INTO notice_person (id, notice_edu) VALUES (12, '硕士研究生');
INSERT INTO notice_person (id, notice_edu) VALUES (13, '大学本科');
INSERT INTO notice_person (id, notice_edu) VALUES (14, '大专');
INSERT INTO notice_person (id, notice_edu) VALUES (15, '大学本科');
INSERT INTO notice_person (id, notice_edu) VALUES (16, '高中');
INSERT INTO notice_person (id, notice_edu) VALUES (17, '大学本科');
INSERT INTO notice_person (id, notice_edu) VALUES (18, '高中');
INSERT INTO notice_person (id, notice_edu) VALUES (19, '技校');
INSERT INTO notice_person (id, notice_edu) VALUES (20, '大专');
INSERT INTO notice_person (id, notice_edu) VALUES (21, '大学本科');
INSERT INTO notice_person (id, notice_edu) VALUES (28, '大学本科');
查询效果:
查询语句:
-- 通报人员学历占比 小学1 初中2 高中1 中专0 技校0 大专1 职高0 其他0 大学本科3 硕士1 博士0
select
sum(CASE WHEN a.notice_edu='小学' THEN 1 ELSE 0 END) xiaoxueCount,
sum(CASE WHEN a.notice_edu='初中' THEN 1 ELSE 0 END) chuzhongCount,
sum(CASE WHEN a.notice_edu='高中' THEN 1 ELSE 0 END) gaozhongCount,
sum(CASE WHEN a.notice_edu='中专' THEN 1 ELSE 0 END) zhongzhuanCount,
sum(CASE WHEN a.notice_edu='技校' THEN 1 ELSE 0 END) jixiaoCount,
sum(CASE WHEN a.notice_edu='大专' THEN 1 ELSE 0 END) dazhuanCount,
sum(CASE WHEN a.notice_edu='职高' THEN 1 ELSE 0 END) zhigaoCount,
sum(CASE WHEN a.notice_edu='其他' THEN 1 ELSE 0 END) qitaCount,
sum(CASE WHEN a.notice_edu='大学本科' THEN 1 ELSE 0 END) daxuebenkeCount,
sum(CASE WHEN a.notice_edu='硕士研究生' THEN 1 ELSE 0 END) shuoshiCount,
sum(CASE WHEN a.notice_edu='博士研究生' THEN 1 ELSE 0 END) boshiCount
from notice_person a
on b.id = a.notice_id and a.notice_edu !='';
这里的case when使用当达到条件时就给1,外面有个sum来加起来,如果外面没有sum没法计数,这样就可以获取总人数.