如何删除使用array_agg postgres函数生​​成的重复项

时间:2014-10-14 14:46:46

标签: sql postgresql select array-agg

有没有人知道如何重写以下SQL查询来生成结果,那只包含一次名称? (按用户分组的结果)。

查询

SELECT array_to_string(array_agg(CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

可执行查询可在 sqlfiddle.com 上查看。 单击Run SQL按钮,结果将包含 Frantisek Smith 两次

1 个答案:

答案 0 :(得分:51)

您可以使用distinct内的array_agg关键字:

SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

SQLFiddle with this example