GROUP_CONCAT

GROUP_CONCAT([DISTINCT] expr [ORDER BY …] [SEPARATOR str])

Verbindet die Werte aus allen Zeilen einer Gruppe zu einer Zeichenkette. Das Standardtrennzeichen ist ein Komma; Reihenfolge und Trennzeichen lassen sich einstellen. NULL wird übersprungen.

Parameter

  • expr – der verbundene Wert (es können mehrere sein; sie werden ohne Trennzeichen verbunden).
  • DISTINCT – optional, nur verschiedene Werte.
  • ORDER BY – optional, die Reihenfolge der Werte.
  • SEPARATOR – optional, das Trennzeichen, standardmäßig ','.

Beispiele

Die Beispiele mit den Tabellen customers, products und orders verwenden die Beispieldatenbank aus der Serie SQL-Grundlagen.

SELECT category, GROUP_CONCAT(name ORDER BY name SEPARATOR ', ') AS product_list
FROM products
GROUP BY category
ORDER BY category;
+-------------+------------------------------+
| category    | product_list                 |
+-------------+------------------------------+
| Accessories | Coffee grinder               |
| Drinks      | Coffee beans 1 kg, Green tea |
| Food        | Cane sugar                   |
| Tableware   | Glass teapot, White mug      |
+-------------+------------------------------+

Eine Liste der Städte der Kunden ohne Wiederholung:

SELECT GROUP_CONCAT(DISTINCT city ORDER BY city SEPARATOR ' · ') AS cities FROM customers;
+-----------------------------+
| cities                      |
+-----------------------------+
| Leeds · London · Manchester |
+-----------------------------+

Worauf Sie achten sollten

  • Das Ergebnis wird stillschweigend auf die Länge group_concat_max_len gekürzt – in MySQL beträgt der Standardwert nur 1.024 Byte, in MariaDB 1 MB. Für lange Listen setzen Sie SET SESSION group_concat_max_len = 100000.
  • Eine Liste in einer Zeichenkette eignet sich für die Anzeige. Für die weitere Verarbeitung in PHP laden Sie die Zeilen besser einzeln.

Siehe auch:
CONCAT_WS()
COUNT()
FIND_IN_SET()
JSON_ARRAY()