原表tmp:
问题,将课程放到列上去
用case when 或 if ,外面再嵌套一个sum即可。
#对于c_name,转成列
##两种方法结果一样
#case when 表达式1 then 值1 when 表达式2 then 值2 else 值 end
SELECT stu_id,
SUM(CASE WHEN c_name = '语文' THEN grade ELSE 0 END) '语文',
SUM(CASE WHEN c_name = '数学' THEN grade ELSE 0 END) '数学',
SUM(CASE WHEN c_name = '英语' THEN grade ELSE 0 END) '英语'
FROM tmp GROUP BY stu_id;
# if(表达式, 值1, 值2)
SELECT stu_id,
SUM(IF(c_name = '语文',grade,0)) '语文',
SUM(IF(c_name = '数学',grade,0)) '数学',
SUM(IF(c_name = '英语',grade,0)) '英语'
FROM tmp GROUP BY stu_id;
结果:
问题,把stu_id放到一格中
#列转行
#hive的函数
selcet
collect_set(stu_id) stu_id_set,
collect_list(stu_id) stu_id_list
FROM tmp;
结果:
stu_id_set | stu_id_list |
---|---|
[‘1’,‘2’,‘3’] | [‘1’,‘1’,‘1’,‘2’,‘2’,‘2’,‘3’,‘3’,‘3’] |