Ce face GROUP_CONCAT()
GROUP_CONCAT() este o funcție de agregare: pentru fiecare grup din GROUP BY, unește valorile într-un text. Implicit le separă prin virgulă; poți alege alt separator, ordinea și eliminarea duplicatelor.
Lungimea rezultatului este limitată de variabila group_concat_max_len (implicit 1024 de octeți). Textul mai lung este tăiat, cu un avertisment.
Parametri
| Parametru | Descriere |
|---|---|
DISTINCT |
Opțional. Elimină valorile duplicate. |
expresie |
Valoarea unită. |
ORDER BY |
Opțional. Ordinea valorilor în text. |
SEPARATOR |
Opțional. Textul dintre valori (implicit ','). |
Ce returnează
Textul unit sau NULL dacă toate valorile sunt NULL.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE vanzari (
agent VARCHAR(20),
oras VARCHAR(20),
luna INT,
suma INT
);
INSERT INTO vanzari VALUES
('Ana', 'Iași', 1, 1200), ('Ana', 'Iași', 2, 1500), ('Ana', 'Iași', 3, 900),
('Dan', 'Cluj', 1, 900), ('Dan', 'Cluj', 2, 900), ('Dan', 'Cluj', 3, 1700),
('Ioana', 'Iași', 1, 2000), ('Ioana', 'Iași', 2, 1100);
Exemplul 1: Agenții din fiecare oraș
SELECT oras, GROUP_CONCAT(DISTINCT agent ORDER BY agent SEPARATOR ', ') AS agenti
FROM vanzari
GROUP BY oras
ORDER BY oras;
Rezultat
+-------+------------+
| oras | agenti |
+-------+------------+
| Cluj | Dan |
| Iași | Ana, Ioana |
+-------+------------+
Exemplul 2: Toate sumele unui agent, în ordinea lunilor
SELECT agent, GROUP_CONCAT(suma ORDER BY luna SEPARATOR ' → ') AS evolutie
FROM vanzari
GROUP BY agent
ORDER BY agent;
Rezultat
+-------+-----------------------+
| agent | evolutie |
+-------+-----------------------+
| Ana | 1200 → 1500 → 900 |
| Dan | 900 → 900 → 1700 |
| Ioana | 2000 → 1100 |
+-------+-----------------------+
Greșeli frecvente
- Folosești
GROUP_CONCAT()pe grupuri mari și pierzi date fără să observi: textul este tăiat la 1024 de octeți. Mărește limita cuSET SESSION group_concat_max_len = 100000;.
Comenzi înrudite
GROUP BY: Grupează rândurile cu aceeași valoare, ca să calculezi totaluri pentru fiecare grup.JSON_ARRAYAGG(): Funcție de agregare: strânge valorile unui grup într-o listă JSON.