Hive——函数-拼接字符串(含案例演示建议收藏)

本文通过实例展示了如何使用SQL查询从emp_sex和person_info表中统计不同部门的男女比例,并对星座血型相同的人进行分组。涉及的知识点包括数据导入、聚合函数和数据聚合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例

一、
创建一个新的文件: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;

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值