MySQL gruppierte/ausgeblendete Datensätze nach Gruppierung beibehalten mit GROUP_CONCAT

17. November 2011  |  Kommentar schreiben   |  Tags: , , , ,



Bei Facebook teilen

Haben Sie sich die Frage gestellt – Wir gruppieren mit MySQL und was passiert mit den ganzen Werten, die in Spalten stehen, nach denen wir nicht gruppieren? Diese werden unter Umständen einfach durch die GROUP BY Klausel ausgeblendet. Manchmal möchten wir Sie aber behalten und sogar in einer bestimmten Reihenfolge. Anbei eine Erklärung, wie wir Werte von einer Gruppieren beibehalten können – mit MySQL Programmierung und die Funktion GROUP_CONCAT.

Ausgangsbasis

Wir haben folgende Tabelle:

ID    Zimmer         BesucherID
1       100             1
2       101             1
3       105             2

Wenn wir folgenden Befehl ausführen, um nach BesucherID mit MySQL GROUP BY zu gruppieren, so führen wir folgende Abfrage aus:

SELECT COUNT(*) as cnt, Zimmer, BesucherID FROM Tabelle GROUP BY BesucherID

Wir bekommen daraufhin einen solchen Ergebnis:

cnt    Zimmer BesucherID
2        100         1
1        105         1

Was passiert aber mit sämtlichen Zimmerangaben? Hier bekommen wir einen zufälligen Wert, der sich auf die BesucherID bezieht.

Problemstellung

Nach Gruppierung mit MySQL möchten wir ggf. ausgeblendete Daten beibehalten und nicht nur per Random einen zufälligen Wert geliefert bekommen, wenn wir die Spalte selektieren.

Lösung

MySQL bietet die schöne Funktion GROUP_CONCAT, mit denen wir alle durch die Gruppierung ausgeblendeten Werte pro Spalte erhalten können. So lautet die Abfrage:

SELECT COUNT(*) as cnt, GROUP_CONCAT(Zimmer), BesucherID FROM Tabelle GROUP BY BesucherID

Hierbei bekommen wir folgendes Ergebnis:

cnt     Zimmer       BesucherID
2         100,101      1
1          105            1

Diese Funktion ist sehr nützlich, insbesondere wenn Sie durch die Gruppierung MIN oder MAX Werte suchen und Ihre korrespondierende Angaben direkt sehen wollen. Genau das zu tun, können Sie auch die Reihenfolge der Werte bestimmen, die durch GROUP_CONCAT in einer kommagetrennte Liste gezählt werden. So wird das gemacht mit GROUP_CONCAT und ORDER BY:

SELECT COUNT(*) as cnt, GROUP_CONCAT(Zimmer ORDER BY BesucherID), BesucherID FROM Tabelle GROUP BY BesucherID

Fazit

Wir hoffen, dass Sie sich mit dieser Funktion einige Zeit sparen konnten. Falls Ihnen der Beitrag gefällt, so nutzen Sie bitte den Gefällt mir Facebook Button.
Brauchen Sie Hilfe, kommen Sie nicht weiter? Wir stehen Ihnen zur Verfügung – 02161 / 177747 oder E-Mail.

Teilen

Hinterlasse eine Antwort

Du musst angemeldet sein, um einen Kommentar abzugeben.