有谁知道如何重写下面的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 上执行可执行查询。
单击“运行SQL”按钮,您将得到结果,其中两次包含Frantisek Smith

最佳答案

您可以在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

10-06 12:09