Scalanie wielu połączonych wierszy tabeli jako jeden w zapytaniu MySQL
W MySQL, scalanie (agregacja) wielu połączonych wierszy tabeli w jeden wiersz może być realizowane za pomocą funkcji `GROUP_CONCAT()`. Ta funkcja agreguje wartości z wielu wierszy w jeden wiersz, oddzielając wartości domyślnym separatorem przecinkiem (`,`) lub innym, określonym przez użytkownika.
Przykład zastosowania
Załóżmy, że mamy dwie tabele: `produkty` i `kategorie`, gdzie każdy produkt jest przypisany do jednej kategorii, a naszym celem jest wyświetlenie listy produktów dla każdej kategorii w jednym wierszu.
Tabele:
- `produkty` (id, nazwa, kategoria_id)
- `kategorie` (id, nazwa_kategorii)
SQL z funkcją GROUP_CONCAT()
SELECT k.nazwa_kategorii, GROUP_CONCAT(p.nazwa SEPARATOR ', ') AS lista_produktow
FROM produkty p
JOIN kategorie k ON p.kategoria_id = k.id
GROUP BY k.nazwa_kategorii;
W tym zapytaniu łączymy tabelę `produkty` z tabelą `kategorie` za pomocą klucza obcego `kategoria_id`. Następnie, używamy `GROUP_CONCAT()` do agregacji nazw produktów należących do tej samej kategorii w jeden wiersz. Separator `', '` określa, że nazwy produktów w agregowanym ciągu będą oddzielone przecinkiem i spacją.
Personalizacja separatora
Funkcja `GROUP_CONCAT()` pozwala na dostosowanie separatora za pomocą klauzuli `SEPARATOR`. Można to zmodyfikować, aby pasowało do wymagań formatowania danych wyjściowych.
Zaawansowane użycie
Można również stosować `GROUP_CONCAT()` z innymi funkcjami agregującymi (np. `SUM()`, `AVG()`), aby uzyskać bardziej złożone podsumowania danych. Dodatkowo, `GROUP_CONCAT()` wspiera użycie `DISTINCT` do eliminacji powtarzających się wartości w wynikowym ciągu.
Podsumowując, `GROUP_CONCAT()` jest potężnym narzędziem w MySQL, pozwalającym na efektywne agregowanie danych z wielu wierszy do jednego, co ułatwia organizację i prezentację skonsolidowanych informacji.
Komentarz