J'ai une table et je voudrais tirer une ligne par identifiant avec les valeurs de champ concaténées.
Dans ma table, par exemple, j'ai ceci:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
Et je voudrais sortir:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
Dans MySQL, j'ai pu utiliser la fonction d'agrégation GROUP_CONCAT
, mais cela ne semble pas fonctionner ici ... Existe-t-il un équivalent pour PostgreSQL, ou une autre façon d'accomplir cela?
sql
postgresql
group-concat
string-aggregation
TwixxyKit
la source
la source
Réponses:
C'est probablement un bon point de départ (version 8.4+ uniquement):
array_agg renvoie un tableau, mais vous pouvez le CASTER en texte et le modifier si nécessaire (voir les clarifications ci-dessous).
Avant la version 8.4, vous devez le définir vous-même avant d'utiliser:
(paraphrasé de la documentation PostgreSQL)
Clarifications:
la source
Depuis la version 9.0, c'est encore plus simple:
la source
array_agg
) par exemplestring_agg(some_column, ',' ORDER BY some_column)
ou mêmestring_agg(surname || ', ' || forename, '; ' ORDER BY surname, forename)
distinct
fonctionne avec string_agg, donc on peut utiliserstring_agg(distinct some_solumn, ',')
TEXT
s'il s'agit d'une valeur non chaîne (c'est-à-direuuid
). Cela ressemblerait àstring_agg(some_column::text, ',')
Fera aussi bien.
la source
Essayez comme ceci:
la source
et la version pour travailler sur le type de tableau :
la source
character varying(5)[]
. De plus, j'ai vérifié que pour mon but - unnestr est nécessaire, sinon vous verrezERROR: cannot accumulate arrays of different dimensionality
.Ma sugestion en postgresql
la source
ORDER BY
dans une requête interne? La commande ne sera-t-elle pas perdue de toute façon?J'espère que la requête Oracle fonctionnera.
la source