Verständnisproblem bei GROUP_CONCAT

norbert_pdm

Aktiver Benutzer
Beiträge
25
Hallo, hallo und guten Abend....

Ich hab mal wieder ne Frage ;-)

Ich habe zwei Tabellen, welche durch eine m:n Beziehung miteinander verknüpft sind.
Wenn ich eine 'normale' Abfrage mache, kommt das völlig korrekte Ergebnis.
Code:
SELECT
    gru.tbl_gruppe_name AS Name,
    gru.tbl_gruppe_ort AS Ort,
    gz.tbl_gz_wochentag AS Tag,
    gz.tbl_gz_start AS Anfang,
    ADDTIME(tbl_gz_start, tbl_gz_laenge) AS Ende
FROM
    tbl_gruppe_has_tbl_gruppenzeit gruzeit
    LEFT JOIN tbl_gruppe gru ON gru.tbl_gruppe_ID = gruzeit.tbl_gruppe_ID
    LEFT JOIN tbl_gruppenzeit gz ON gz.tbl_gruppenzeit_ID = gruzeit.tbl_gruppenzeit_ID

Ich möchte aber gerne alle passenden Einträge zusammen fassen. Dazu hab ich folgendes geschrieben:
Code:
SELECT
    gru.tbl_gruppe_name AS Name,
    gru.tbl_gruppe_ort AS Ort,
    GROUP_CONCAT(CONCAT(gz.tbl_gz_wochentag, ': ', gz.tbl_gz_start, ' - ', ADDTIME(tbl_gz_start, tbl_gz_laenge)) SEPARATOR ' | ') AS ZEIT
FROM
    tbl_gruppe_has_tbl_gruppenzeit gruzeit
    LEFT JOIN tbl_gruppe gru ON gru.tbl_gruppe_ID = gruzeit.tbl_gruppe_ID
    LEFT JOIN tbl_gruppenzeit gz ON gz.tbl_gruppenzeit_ID = gruzeit.tbl_gruppenzeit_ID

Das ist zumindest syntaktisch richtig... Aber es gibt nur eine einzige Zeile als Ausgabe...

Ich seh nicht warum....?

Habt ihr eine Idee...?

VG, Norbert
 
Werbung:
GROUP_CONCAT ist eine Aggregatsfunktion. Wenn Du aggregierst, müssen alle Spalten im Result entweder aggregiert oder gruppiert sein.

Code:
test=*# select * from norbert_pdm ;
 name |   ort   | wochentag
------+---------+-----------
 Hans | Berlin  | Montag
 Hans | Berlin  | Dienstag
 Susi | Dresden | Mittwoch
(3 rows)

test=*# select name, ort, string_agg(wochentag,', ') from norbert_pdm ;
FEHLER:  Spalte »norbert_pdm.name« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
LINE 1: select name, ort, string_agg(wochentag,', ') from norbert_pd...
               ^
test=*# select name, ort, string_agg(wochentag,', ') from norbert_pdm group by name;
FEHLER:  Spalte »norbert_pdm.ort« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
LINE 1: select name, ort, string_agg(wochentag,', ') from norbert_pd...
                     ^
test=*# select name, ort, string_agg(wochentag,', ') from norbert_pdm group by name, ort;
 name |   ort   |    string_agg   
------+---------+------------------
 Hans | Berlin  | Montag, Dienstag
 Susi | Dresden | Mittwoch
(2 rows)

test=*#
 
Werbung:
Hallo akretschmer,

sorry, wenn ich jetzt mal kurz pathetisch werde... Du bist ein Datenbank-Gott :D:D

Vielen Dank für deinen Hinweis und die Mühe.
Ich kam jetzt endlich mal wieder dazu, an dem Projekt weiter zu arbeiten und der Tipp mit dem
Code:
GROUP BY
war goldrichtig!!

Also... Noch mal Danke!
Und bis zur nächsten Frage!

Norbert
 
Zurück
Oben