每组总计返回重复项

时间:2019-01-18 10:33:24

标签: sql postgresql grouping

在以下情况下,用户属于几个组。这些小组的层级组织:

enter image description here

我想汇总用户所属组的所有个人信息。例如。人员1属于第7组。第7组与以下第1、5、7、8组(完整分支)有联系

我写了以下查询:

SELECT person.id, array_agg(info)
FROM person LEFT JOIN person_group 
ON ARRAY[person.id] && path
LEFT JOIN person_information ON
ARRAY[person_information.id] && path
GROUP BY person.id;

此查询的问题是我得到了重复的信息:

enter image description here

我不想在array_agg(info)字段上使用UNIQUE。而是我想写我的联接,以便只获得个人信息表的唯一行。

我该怎么做?谢谢

1 个答案:

答案 0 :(得分:0)

我通过以下查询解决了该问题:

SELECT person.id,  array_agg(info) FROM person 
LEFT JOIN person_information ON
person_information.id IN (
  SELECT DISTINCT(UNNEST(path)) 
  FROM person_group
  WHERE ARRAY[person.group_id] && path
) GROUP BY person.id;

您有更好的方法吗?