--练习题
stu_no,stu_name,course,score
1,段瑞,hive,100
1,段瑞,spark,130
1,段瑞,flink,120
1,段瑞,hadoop,100
1,段一,hive,150
1,段一,spark,140
1,段一,flink,150
1,段一,hadoop,160
1,段二,hive,210
1,段二,spark,220
1,段二,flink,240
1,段二,hadoop,220
-- 查询出如下结果
stu_no,stu_name,hive成绩,spark成绩,flink成绩,hadoop成绩
create table tmp.lianxi( stu_no int ,stu_name string ,course string ,score int ) row format delimited fields terminated by ','; load data local inpath '/root/test1' into table tmp.lianxi; SELECt stu_no ,stu_name --上面四个字段按照字典顺序排序之后的顺序就是这样 ,split(x[0],':')[1] as `flink成绩` ,split(x[1],':')[1] as `hadoop成绩` ,split(x[2],':')[1] as `hive成绩` ,split(x[3],':')[1] as `spark成绩` FROM ( SELECt stu_no, stu_name, --排序之后的成绩是按照单词的首字母进行排序的,务必按照字典顺序去取数据 sort_array(collect_list( course || ':' || score )) as x from tmp.lianxi group by stu_no, stu_name) o
下面这个方法比较简单,而且可以设置查询的结果的顺序
-------------------------方法二-----------------------
with tmp as (
select
stu_no,
stu_name,
str_to_map(concat_ws('_',collect_list( course || ':' || score )),'_',':') as info
from tmp.lianxi
group by stu_no, stu_name
)
select
stu_no,
stu_name
,info['hive'] as `hive成绩`
,info['spark'] as `spark成绩`
,info['flink'] as `flink成绩`
,info['hadoop'] as `hadoop成绩`
from tmp



