拆分数组,仅提取唯一值,然后在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。添加-我正在编辑原始数据集以保护无辜者:)