原始数据(姓名,部门,性别)
悟空 A 男
娜娜 A 男
宋宋 B 男
凤姐 A 女
热巴 B 女
慧慧 B 女
建表,导入数据
create table tb_case(
name string ,
dname string ,
gender string
)
row format delimited fields terminated by "\t" ;
load data local inpath "/doit16/case.txt" into table tb_case ;
需求:得到如下结果
dname 男 女
A 2 1
B 1 2
解决:
按照部门分组 group by dname, 再组内做判断, 如果gender == 男,就加1计数,统计组内男性个数, 这个可以命名为M作为一个新字段, 同样也可以用同样的方式统计组内女性的个数
select
dname ,
sum(if(gender=='男',1,0)) M,
sum(if(gender=='女',1,0)) F
from
tb_case
group by dname
也可以是用case when 方式统计男女的个数
方式一;
select
dname,
sum(case gender when '男' then 1 else 0 end) M,
sum(case gender when '女' then 1 else 0 end) F
from
tb_case
group by dname
方式二:
方式二
select
dname ,
sum(case when gender == '男' then 1 else 0 end) as m ,
sum(case when gender == '女' then 1 else 0 end) as f
from
tb_case
group by dname
;