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"]                          |
+-------+-----------------------------------------+--+

根据您需要的输出,您可能需要一个
映射
,而不是
列表