web-dev-qa-db-ja.com

array_agg postgres関数で生成される重複を削除する方法

結果を生成するために次の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を2回含む結果が表示されます

34
Peter Jurkovic

array_agg内でdistinctキーワードを使用できます。

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

60
Mureinik