一、
创建一个新的文件:emp_sex.txt
vim emp_sex.txt数据准备
悟空,A,男 大海,A,男 宋宋,B,男 凤姐,A,女 婷姐,B,女 婷婷,B,女创建新的表用于存储数据
create table emp_sex( name string, dept_id string, sex string) row format delimited fields terminated by ",";导入数据
load data local inpath'/opt/module/data/emp_sex.txt' into table emp_sex;需求:
求出不同部门男女各多少。
code:
select
dept_id,
sum(case sex when '男' then 1 else 0 end) maleCount,
sum(case sex when '女' then 1 else 0 end) femaleCount
from
emp_sex
group by dept_id;
结果:
二、创建一个新的文件
vim person_info.txt数据准备
孙悟空,白羊座,A 大海,射手座,A 宋宋,白羊座,B 猪八戒,白羊座,A 凤姐,射手座,A 苍老师,白羊座,B创建新的表用于存储数据
create table person_info( name string, constellation string, blood_type string) row format delimited fields terminated by ",";导入数据
load data local inpath'/opt/module/data/person_info.txt' into table person_info;需求
把星座和血型一样的人归类到一起。
分步解决。
1、先将星座和血型拼接在一起。
select
concat(constellation,',',blood_type) con_blood,
name
from
person_info;
结果:
2、 在1的基础上将con_blood的人的名字合并在一行。
select
con_blood,
collect_set(name) name_arr
from
(select
concat(constellation,',',blood_type) con_blood,
name
from
person_info)t1
group by con_blood;
结果:
3、利用concat_ws对列表中的字符串进行拼接
select
con_blood,
concat_ws('|',name_arr)
from
(select
con_blood,
collect_set(name) name_arr
from
(select
concat(constellation,',',blood_type) con_blood,
name
from
person_info)t1
group by con_blood)t2;
or
select
con_blood,
concat_ws('|',collect_set(name))
from
(select
concat(constellation,',',blood_type) con_blood,
name
from
person_info)t1
group by con_blood;
结果:



