it-swarm.com.de

So entfernen Sie Duplikate, die mit der Funktion array_agg postgres generiert wurden

Hat jemand eine Idee, wie man folgende SQL-Abfrage umschreibt, um Ergebnisse zu generieren, die nur ein Vorkommen des Namens enthalten würden? (Ergebnisse nach Benutzer gruppiert).

Die Abfrage

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

Ausführbare Abfragen sind verfügbar unter sqlfiddle.com. Klicken Sie auf die Schaltfläche SQL ausführen und Sie erhalten das Ergebnis, das zweimal Frantisek Smith enthält

34
Peter Jurkovic

Sie können das Schlüsselwort distinct in array_agg Verwenden:

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 mit diesem Beispiel

60
Mureinik