如何使用redshift的LISTAGG创建新列

时间:2016-07-11 18:29:27

标签: sql postgresql amazon-redshift

我使用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中实现这样的三列方案吗?另外,我们可以对列中的数据项进行排序,以便左列中的数据小于右边的数据吗?

1 个答案:

答案 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 放入第三列。