拆分数组,仅提取唯一值,然后在Postgresql中重新合并到数组
我有一个使用以下代码分组的数据集:拆分数组,仅提取唯一值,然后在Postgresql中重新合并到数组,postgresql,Postgresql,我有一个使用以下代码分组的数据集: select array_to_string(array_agg(DISTINCT "Categories"), ',') as "Categories", "Name", ROW_NUMBER() OVER() as "ID" from data1 group by "Name" 看起来是这样的: +----+--------+-----------------------------------------+ | ID | Name | Catego
select
array_to_string(array_agg(DISTINCT "Categories"), ',') as "Categories", "Name", ROW_NUMBER() OVER() as "ID"
from data1
group by "Name"
看起来是这样的:
+----+--------+-----------------------------------------+
| ID | Name | Categories |
+----+--------+-----------------------------------------+
| 1 | Class1 | Barry, Steve, Luke, Barry, Barry, Luke |
+----+--------+-----------------------------------------+
| 2 | Class2 | Luke, Barry, Steve |
+----+--------+-----------------------------------------+
| 3 | Class3 | Gerald, Jacqueline, David, Barry, Barry |
+----+--------+-----------------------------------------+
我只需要在“类别”中有唯一的值。然而,在第一行中,数据库认为Barry,Steve,Luke
是一个字符串,而Barry,Luke
是一个字符串,因此使用DISTINCT
不能减少Barry
的数量
我们需要使用逗号分隔符拆分字符串,然后重新聚合它
输出应该如下所示:
+----+--------+-----------------------------------------+
| ID | Name | Categories |
+----+--------+-----------------------------------------+
| 1 | Class1 | Barry, Steve, Luke |
+----+--------+-----------------------------------------+
| 2 | Class2 | Luke, Barry, Steve |
+----+--------+-----------------------------------------+
| 3 | Class3 | Gerald, Jacqueline, David, Barry |
+----+--------+-----------------------------------------+
您可以使用如下查询提取唯一值
select
ID,
Name,
(
select string_agg(c, ',')
from (
select
distinct trim(unnest(string_to_array(Categories, ',')))
) t (c)
) as Categories
from your_table_name;
但最好在分组时聚合不同的值。您可以使用如下查询提取唯一的值
select
ID,
Name,
(
select string_agg(c, ',')
from (
select
distinct trim(unnest(string_to_array(Categories, ',')))
) t (c)
) as Categories
from your_table_name;
但最好在分组时聚合不同的值。在分组时聚合更容易,而不是在分组后聚合。显示分组步骤。编辑为包含-这有帮助吗?您的代码应该已经可以工作了。我不明白为什么没有。您发布的代码不包含id。显示用于生成分组集的代码。添加-我正在对原始数据集进行编辑以保护无辜者:)分组时执行此操作会更容易,而不是在分组后执行。显示分组步骤。编辑为包含-这有帮助吗?您的代码应该已经可以工作了。我不明白为什么没有。您发布的代码不包含id。显示用于生成分组集的id。添加-我正在编辑原始数据集以保护无辜者:)