Sql 配置单元-收集具有多列的\u列表?
假设我的桌子是这样的:Sql 配置单元-收集具有多列的\u列表?,sql,hive,Sql,Hive,假设我的桌子是这样的: Name,Subject,Score Jon,English,80 Amy,Geography,70 Matt,English,90 Jon,Math,100 Jon,History,60 Amy,French,90 是否有一种方法可以使用收集列表,这样我就可以得到这样的查询: Jon: English:80; Math:100; History:60 Amy: Geography:70; French:90 Matt: English:90 编辑: 这里的复杂之处在
Name,Subject,Score
Jon,English,80
Amy,Geography,70
Matt,English,90
Jon,Math,100
Jon,History,60
Amy,French,90
是否有一种方法可以使用收集列表
,这样我就可以得到这样的查询:
Jon: English:80; Math:100; History:60
Amy: Geography:70; French:90
Matt: English:90
编辑:
这里的复杂之处在于,collect_list
UDF只允许一个参数,即一列。
差不多
SELECT name, collect_list(subject), collect_list(score) from mytable group by name
导致
Jon | [English,Math,History] | [80,100,60]
Amy | [Geography,French] | [70,90]
Matt | [English] | [90]
不确定这是否是你需要的
select * from t0;
+-------+------------+-------+--+
| t0.a | t0.b | t0.c |
+-------+------------+-------+--+
| Jon | English | 80 |
| Amy | Geography | 70 |
| Matt | English | 90 |
| Jon | Math | 100 |
| Jon | History | 60 |
| Amy | French | 90 |
+-------+------------+-------+--+
select a, collect_list(concat_ws(':',b,cast(c as string))) from t0 group by a;
+-------+-----------------------------------------+--+
| a | _c1 |
+-------+-----------------------------------------+--+
| Amy | ["Geography:70","French:90"] |
| Jon | ["English:80","Math:100","History:60"] |
| Matt | ["English:90"] |
+-------+-----------------------------------------+--+
根据您需要的输出,您可能需要一个
映射
,而不是列表
。