web-dev-qa-db-fra.com

Comment supprimer les doublons générés avec la fonction array_agg postgres

Quelqu'un at-il une idée de la façon de réécrire la requête SQL suivante pour générer des résultats, qui ne contiendrait qu'une seule occurrence de nom? (résultats regroupés par utilisateur).

La requête

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

La requête exécutable est disponible sur sqlfiddle.com. Cliquez sur le bouton Exécuter SQL et vous obtiendrez, qui contient Frantisek Smith deux fois

34
Peter Jurkovic

Vous pouvez utiliser le mot clé distinct dans 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 avec cet exemple

60
Mureinik