Comment faire pour supprimer les doublons, qui sont générés avec array_agg postgres fonction
Quelqu'un at-il une idée de comment la réécriture de requête SQL suivante pour générer des résultats, qui seraient contient une seule occurrence du nom? (les résultats groupés par l'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
Exécutable de requête est disponible sur sqlfiddle.com.
Cliquez sur Exécuter SQL bouton et vous aurez raison, qui contient Frantisek Smith deux fois
array_agg(distinct concat(...)))
Dans postgre 9.0+, il est
string_agg(text,text)
fonction. Il peut être plus facile à écrire string_agg(CONCAT(...),', ')
distinctes fonctionne très bien, mais brouille l'ordre. Une manière de préserver?
utiliser un
order by
à l'intérieur de string_agg()
J'ai essayé string_agg(distinct nome commande par l'.id,', ') et string_agg(distinct nome commande par nome,', '), mais à la fois donner une "fonction string_agg(character varying) n'existe pas". Je vais vous poser une question, avec la pleine sql pour vous montrer.
OriginalL'auteur Peter Jurkovic | 2014-10-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
distinct
mot-clé à l'intérieur dearray_agg
:SQLFiddle avec cet exemple
ERREUR: DISTINCT n'est pas mis en œuvre pour les fonctions de la fenêtre État SQL :0A000 (PostgreSQL 9.5.5)
M'a sauvé d'avoir à écrire ma propre fonction d'agrégation!
OriginalL'auteur Mureinik