大数据-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');

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行_第1张图片

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

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

结果:

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行_第2张图片2)按用户2)分组,取出每个用户每天看过的所有视频的名字(去重)

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

结果:

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行_第3张图片

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;

结果:

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行_第4张图片

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

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

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行_第5张图片5)按用户分组,取出每个用户每天看过的所有视频的名字(去重,用;分割视频名字)

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

结果:

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行_第6张图片

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

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

结果:

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行_第7张图片

4. leetcode练习题

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

你可能感兴趣的:(大数据,hive,hadoop,数据仓库)