如何将所有结果行列数据聚合在一列中?
How to aggregate all the resulted rows column data in one column?
我有一个案例驱动的查询。下面是最简单的形式
select Column 1 from mytable
结果:
Column 1
latinnametest
LatinManual
LatinAuto
是否可以在另一列中显示所有结果行的第 1 列数据的聚合数据,例如每行前面的第 5 列,用逗号分隔?
预期:
Column 1 Column 2
latinnametest latinnametest,LatinManual,LatinAuto
LatinManual latinnametest,LatinManual,LatinAuto
LatinAuto latinnametest,LatinManual,LatinAuto
我使用了 array_agg 和 concat() 但它聚合了第 2 列中的相同行数据,但不是预期添加所有行列数据逗号分隔。请帮忙。
编辑:
我已经尝试了下面提到的解决方案,但我在列中得到了重复的数据。看截图。我将鼠标悬停在最后一列上,看到了重复数据。有什么解决办法吗?
[![在此处输入图片描述][1]][1]
您可以将 string_agg()
用作 window 函数:
select column_1,
string_agg(column_1, ',') over () as all_values
from the_table;
编辑,范围更改后:
如果您需要不同的值,请使用派生的 table:
select column_1,
string_agg(column_1, ',') over () as all_values
from (
select distinct column_1
from the_table
) t;
或者使用常见的 table 表达式:
with vals as (
select string_agg(distinct column_1, ',') as all_values
from the_table
)
select t.column_1, v.all_values
from the_table t
cross join vals v
我有一个案例驱动的查询。下面是最简单的形式
select Column 1 from mytable
结果:
Column 1
latinnametest
LatinManual
LatinAuto
是否可以在另一列中显示所有结果行的第 1 列数据的聚合数据,例如每行前面的第 5 列,用逗号分隔?
预期:
Column 1 Column 2
latinnametest latinnametest,LatinManual,LatinAuto
LatinManual latinnametest,LatinManual,LatinAuto
LatinAuto latinnametest,LatinManual,LatinAuto
我使用了 array_agg 和 concat() 但它聚合了第 2 列中的相同行数据,但不是预期添加所有行列数据逗号分隔。请帮忙。
编辑: 我已经尝试了下面提到的解决方案,但我在列中得到了重复的数据。看截图。我将鼠标悬停在最后一列上,看到了重复数据。有什么解决办法吗? [![在此处输入图片描述][1]][1]
您可以将 string_agg()
用作 window 函数:
select column_1,
string_agg(column_1, ',') over () as all_values
from the_table;
编辑,范围更改后:
如果您需要不同的值,请使用派生的 table:
select column_1,
string_agg(column_1, ',') over () as all_values
from (
select distinct column_1
from the_table
) t;
或者使用常见的 table 表达式:
with vals as (
select string_agg(distinct column_1, ',') as all_values
from the_table
)
select t.column_1, v.all_values
from the_table t
cross join vals v