大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行

目录

1. 🥙collect_list: 聚合-不去重

2. 🥙collect_set(col): 聚合-去重

3. 🥙mysql的聚合函数-group_concat

4. leetcode练习题


1. 🥙collect_list: 聚合-不去重

将组内的元素收集成数组 不会去重

2. 🥙collect_set(col): 聚合-去重

函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 Array 类型字段。

//创建一张实验用表,存放用户每天点播视频的记录
create table t_visit_video (
                               username string,
                               video_name string
) partitioned by (day string)
row format delimited fields terminated by ',';

//创建visit.txt数据文件
张三,大唐双龙传
李四,天下无贼
张三,神探狄仁杰
李四,霸王别姬
李四,霸王别姬
王五,机器人总动员
王五,放牛班的春天
王五,盗梦空间

//导入数据
load data local inpath '/opt/testDemo/visit.txt' into table t_visit_video partition (day='20180516');

 1)按用户分组,取出每个用户每天看过的所有视频的名字(不去重)

select username,collect_list(video_name)
from t_visit_video
group by username;

结果:

2)按用户2)分组,取出每个用户每天看过的所有视频的名字(去重)

select username,collect_set(video_name)
from t_visit_video
group by username;

结果:

3. 🥙mysql的聚合函数-group_concat

GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
将结果集中的多行结果连接成一个字符串

-- group_concat对于收集的字段只能是string,varchar,char类型  
--当不指定分隔符的时候,默认使用 ','
//创建一张实验用表,存放用户每天点播视频的记录
create table t_visit_video (
username varchar(20),
video_name varchar(20)
);

//插入数据
insert into t_visit_video values
('张三','大唐双龙传'),
('李四','天下无贼'),
('张三','神探狄仁杰'),
('李四','霸王别姬'),
('李四','霸王别姬'),
('王五','机器人总动员'),
('王五','放牛班的春天'),
('王五','盗梦空间');

3)按用户分组,取出每个用户每天看过的所有视频的名字(不去重)

select username,group_concat(video_name)
from t_visit_video
group by username;

结果:

 4)按用户分组,取出每个用户每天看过的所有视频的名字(去重)

select username,group_concat(distinct video_name)
from t_visit_video
group by username;

5)按用户分组,取出每个用户每天看过的所有视频的名字(去重,用;分割视频名字)

select username,group_concat(distinct video_name separator ';')
from t_visit_video
group by username;

结果:

6)按用户分组,取出每个用户每天看过的所有视频的名字(去重,用;分割视频名字,并将视频名字按照字典顺序降序排序) 

select username,group_concat(distinct video_name order by video_name desc separator ';')
from t_visit_video
group by username;

结果:

4. leetcode练习题

leetcode 1484:按日期分组销售产品

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值