我使用Redshift的LISTAGG
函数按对分组表:
SELECT id, LISTAGG(data, ', ') FROM ... GROUP BY 1;
这会转换表格,如:
1 "data_A"
1 "data_B"
2 "data_C"
2 "data_D"
要:
1 "data_A, data_B"
2 "data_C, data_D"
但是,这意味着我们仍然有两列,但从数据创建三列会很不错:
1 "data_A" "data_B"
2 "data_C" "data_D"
假设我们知道我们每个id只能有两个项目,可以使用LISTAGG
或其他一些功能组合在Redshift中实现这样的三列方案吗?另外,我们可以对列中的数据项进行排序,以便左列中的数据小于右边的数据吗?
答案 0 :(得分:1)
您可以使用聚合代替listagg()
,而不是min()
。因为您需要两个值,max()
和SELECT id, MIN(data), MAX(data)
FROM ...
GROUP BY 1;
可以工作:
id
如果给定SELECT id, MIN(data),
(CASE WHEN MIN(data) <> MAX(data) THEN MAX(data) END)
FROM ...
GROUP BY 1;
只能有一个值,则可以将其标记为:
NULL
如果data
只有一个值,则会将16:07:24,9.13084E+15
16:07:24,8.46849E+18
16:07:24,5.94966E+22
16:07:24,7.15403E+21
16:07:24,3.72465E+14
16:07:24,8.13681E+15
放入第三列。