1. ホーム
  2. sql

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

2023-10-16 09:06:38

質問

次のSQLクエリを書き換えて、nameが1つだけ含まれる結果を生成する方法をご存知の方はいらっしゃいますか? (結果はユーザーごとにグループ化されます).

クエリ

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 が2回表示されます。

どのように解決する?

を使用することができます。 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