Agregacja danych to łączenie wielu wierszy w podsumowania za pomocą funkcji agregujących: COUNT (ile), SUM (suma), AVG (średnia), MIN/MAX (skrajne wartości). W SQL robi się to klauzulą GROUP BY, która dzieli dane na grupy i liczy wynik osobno dla każdej z nich.
To jedna z najczęściej używanych umiejętności SQL w pracy analityka. Pytania biznesowe prawie zawsze dotyczą podsumowań, nie pojedynczych rekordów: „ile wizyt miesięcznie?", „która placówka ma najwyższy odsetek odwołań?", „średni czas oczekiwania per lekarz?". Bez agregacji odpowiadasz Excelem i godziną klikania; z agregacją - jednym zapytaniem.
Przykład z MediFlow: dyrektor pyta, w której z 12 przychodni pacjenci najczęściej odwołują wizyty.
SELECT przychodnia, COUNT(*) AS odwolane
FROM wizyty
WHERE status = 'odwołana'
GROUP BY przychodnia
ORDER BY odwolane DESC;
Wynik: Mokotów 412, Ursynów 380, reszta poniżej 200. Już wiadomo, gdzie zacząć szukanie przyczyn.
Dwie rzeczy, które mylą początkujących. Pierwsza: każda kolumna w SELECT, która nie jest funkcją agregującą, musi znaleźć się w GROUP BY - inaczej baza zwróci błąd (albo, w MySQL, cichaczem coś wylosuje, co bywa gorsze). Druga: WHERE filtruje wiersze przed agregacją, a HAVING filtruje grupy po niej. „Pokaż przychodnie z ponad 300 odwołaniami" to HAVING COUNT(*) > 300, nie WHERE.
Pojęcia powiązane: SQL, GROUP BY, HAVING, funkcje agregujące, raportowanie.