Tags: MySQL

Scalanie wielu połączonych wierszy tabeli jako jeden w zapytaniu Mysql

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.