Zeilen zusammenführen

Hallo,

Ich habe wieder eine Frage bei der ich nicht weiterkomme. Vielleicht weiss jemand Rat oder hat einen tipp.

Ich habe eine Tabelle mit spezies und beschreibungen.

id (pk) | spezies | bluete | blatt | frucht | wuchs
1 | 10 | a | b | c | d |
2 | 10 | | e | f | |
3 | 10 | | | g | h|
4 | 11 |…
5 | 12 |…
6 | 12 |…

Also ich habe für diesselbe spezies im prinzip mehrere zeilen für unterschiedliche einträge von bluete,blatt,frucht,wuchs.
Ich möchte jetzt gern alle gleichen spezies zusammenfassen, damit ich jede spezies nur noch einmal habe. Im prinzip sollten dafür alle blueten der gleichen spezies hintereinandergehängt werden (kommagetrennt oder so)

1 | 10 | a | b,e | c,f,g | d,h
2 | 11 |…
3 | 12 |…

geht das irgendwie? Kann mir jemand sagen wie ich da auf den richtigen Weg komme?

Gruss
Hanno

Ja, mit array_agg() kannst Du aggregieren und bekommst ein ARRAY, mit array_to_string() wandelst das in einen Text. Demo:

test=*# \d hanno
     Table "public.hanno"
 Column |  Type   | Modifiers
--------+---------+-----------
 id     | integer |
 c1     | text    |
 c2     | text    |
 c3     | text    |

test=*# select * from hanno;
 id | c1 | c2  | c3
----+----+-----+-----
  1 | 11 | 12  | 13
  1 | 21 | 22  | 23
  2 | b1 | b2  | b3
  2 |    | b22 | b33
(4 rows)

test=*# select id, array_agg(c1) c1, array_agg(c2) c2, array_agg(c3) c3 from hanno group by id;
 id |    c1     |    c2    |    c3
----+-----------+----------+----------
  1 | {11,21}   | {12,22}  | {13,23}
  2 | {b1,NULL} | {b2,b22} | {b3,b33}
(2 rows)



Time: 0,217 ms
test=*# select id, array_to_string(array_agg(c1),', ') c1, array_to_string(array_agg(c2),', ') c2, array_to_string(array_agg(c3),', ') c3 from hanno group by id;
 id |   c1   |   c2    |   c3
----+--------+---------+---------
  1 | 11, 21 | 12, 22  | 13, 23
  2 | b1     | b2, b22 | b3, b33
(2 rows)

super,
Das ist ja einfacher als gedacht. Ich bin immer wieder erstaunt was postgreSQL alles kann. :slight_smile:

Vielen Dank für die schnelle Antwort.

Gruss
Hanno

Das ist eigentlich noch low level, ehrlich :wink:

Da finde ich Index-Geschichten auf HSTORE / JSONB oder Range-Typen mit Exclusion Constraints oder KNN-Suche deutlich komplexer und interessanter - zumal ‘die anderen’ da gaaaaaaanz schlecht aussehen…