Ważnym elementem dla Analityka jest podsumowanie danych takich jak sprzedaż, zysk, koszty i wynagrodzenie. Podsumowanie danych jest bardzo pomocne dla analityka przy tworzeniu wizualizacji, wnioskowaniu i tworzeniu raportów. W SQL klauzula GROUP BY jest jednym z narzędzi do podsumowania lub agregacji serii danych. Na przykład, podsumuj dzienną sprzedaż i połącz w jednym kwartale i pokaż to kierownictwu wyższego szczebla. Podobnie, jeśli chcesz policzyć, ilu pracowników w każdym dziale firmy. Grupuje on bazy danych na podstawie jednej lub więcej kolumn i agreguje wyniki.
Po zgrupowaniu danych, możesz filtrować zgrupowane rekordy używając klauzuli HAVING. Klauzula HAVING zwraca zgrupowane rekordy, które spełniają podany warunek. Możesz również posortować zgrupowane rekordy używając ORDER BY. ORDER BY jest używane po GROUP BY na kolumnie zagregowanej.
W tym poradniku nauczysz się szczegółowo klauzuli GROUP BY wraz z odpowiednimi przykładami. Poniżej znajduje się lista tematów, które poznasz w tym poradniku:
- Klauzula Group By
- Klauzula Having
- Funkcje agregujące
- Porównanie klauzuli Having i Where w SQL
- GROUP BY z przykładem JOIN
- Porównanie klauzuli GROUP BY z innymi klauzulami
- Prace-on Practice Assignment
- Conclusion
Klauzula GROUP BY
Klauzula GROUP BY jest używana w SQL wraz z instrukcją SELECT do organizowania podobnych danych w grupy. Łączy ona wiele rekordów w jednej lub wielu kolumnach przy użyciu pewnych funkcji. Zazwyczaj są to funkcje agregujące takie jak min(),max(), avg(), count(), oraz sum() do łączenia w pojedynczych lub wielu kolumnach. Do analizy danych używa strategii podziel- zastosuj-połącz.
- W
split phase
, dzieli grupy według wartości. - W
apply phase
, Stosuje funkcję agregującą i generuje pojedynczą wartość. - W
combiner phase
, Łączy grupy z pojedynczymi wartościami w jedną wartość.
Źródło obrazu
Punkty do zapamiętania:
- Klauzula GROUP BY jest wykorzystywana z instrukcją SELECT.
- GROUP BY agreguje wyniki na podstawie wybranej kolumny: COUNT, MAX, MIN, SUM, AVG, etc.
- GROUP BY zwraca tylko jeden wynik na grupę danych.
- Klauzula GROUP BY zawsze następuje po klauzuli WHERE.
- Klauzula GROUP BY zawsze poprzedza klauzulę ORDER BY(http://slideplayer.com/slide/15440670/).
W powyższym przykładzie, tabela jest grupowana na podstawie kolumny DeptID, a Salary jest agregowane department-wise.
Klauzula posiadająca
Klauzula posiadająca jest wykorzystywana w SQL jako klauzula warunkowa z klauzulą GROUP BY. Ta klauzula warunkowa zwraca wiersze, w których wyniki funkcji agregującej pasują tylko do podanych warunków. Klauzula ta została dodana do języka SQL, ponieważ klauzula WHERE nie może być łączona z wynikami agregacji, więc ma ona inne przeznaczenie. Głównym celem klauzuli WHERE jest radzenie sobie z niezagregowanymi lub indywidualnymi rekordami.
- Klauzula HAVING zawsze używana w połączeniu z klauzulą GROUP BY.
- Klauzula HAVING ogranicza dane do rekordów grupowych, a nie indywidualnych.
- WHERE i HAVING mogą być używane w jednym zapytaniu.
W powyższym przykładzie, tabela jest pogrupowana na podstawie kolumny DeptID i te pogrupowane wiersze są filtrowane przy użyciu klauzuli HAVING z warunkiem AVG(Salary) > 3000.
Funkcje agregujące
Funkcje agregujące używane do łączenia wyniku grupy w pojedynczy, takie jak COUNT, MAX, MIN, AVG, SUM, STDDEV i VARIANCE. Funkcje te znane są również jako funkcje wielowierszowe.
-
SUM()
: Zwraca sumę lub całkowitą wartość każdej grupy. -
COUNT()
: Zwraca liczbę wierszy każdej grupy. -
AVG()
: Zwraca średnią i średnią każdej grupy. -
MIN()
: Zwraca minimalną wartość każdej grupy. -
MAX()
: Zwraca minimalną wartość każdej grupy.
Porównanie Having i Where Clause w SQL
- W niektórych przypadkach, musisz odfiltrować pojedyncze rekordy. W takich przypadkach możesz użyć klauzuli WHERE, podczas gdy w innych przypadkach musisz filtrować grupy z określonym warunkiem. W takich przypadkach możesz użyć klauzuli HAVING.
- Klauzula WHERE filtruje rekordy tuple po tuple, podczas gdy klauzula HAVING filtruje całą grupę.
- Zapytanie może posiadać obie klauzule (WHERE i HAVING).
- Klauzula WHERE zastosowana jako pierwsza, a następnie klauzula Having.
- Klauzula WHERE ogranicza rekordy przed wykonaniem klauzuli GROUP BY, podczas gdy klauzula HAVING ogranicza grupy po wykonaniu klauzuli GROUP BY.
- Klauzula WHERE może być użyta z instrukcjami SELECT, UPDATE, DELETE i INSERT, podczas gdy klauzula HAVING może być użyta tylko z instrukcją SELECT.
Image Source
GROUP BY With JOIN Example
Normalizowana relacyjna baza danych rozbija złożoną tabelę na małe tabele, co pomaga wyeliminować nadmiarowość danych, niespójność i zapewnić brak utraty informacji. Tabele znormalizowane wymagają łączenia danych z wielu tabel.
W powyższym przykładzie, Pracownik i Dział są połączone przy użyciu wspólnej kolumny DeptID.
W powyższym przykładzie klauzule JOIN i GROUP BY zostały użyte razem w jednym zapytaniu. Po połączeniu obu tabel (Pracownik i Dział), połączona tabela została pogrupowana według nazwy działu.
Porównanie klauzuli GROUP BY z innymi klauzulami
Porównanie klauzul GROUP BY i DISTINCT
DISTINCT zwraca unikalne wartości obecne w kolumnie, podczas gdy GROUP BY zwraca unikalne/różne elementy z zagregowaną kolumną wynikową. W poniższym przykładzie możesz zobaczyć wartości DISTINCT w tabeli dept
.
Porównanie GROUP BY i ORDER BY
ORDER BY zwraca posortowane elementy w porządku rosnącym i malejącym, podczas gdy GROUP BY zwraca unikalne elementy z kolumną wynikową agregatu. W poniższym przykładzie można zobaczyć tabelę ORDER BY lub posortowaną tabelę wynagrodzeń.
Przykładowe zadanie praktyczne
Tabela Nazwa: Książki
Kolumny: ISBN, Tytuł, Data publikacji, Cena, Wydawca
Napisz zapytania SQL dla następujących stwierdzeń i podziel się swoimi odpowiedziami w komentarzach:
- Określ, ile książek znajduje się w każdej kategorii.
- Określ ile książek jest w kategorii Zarządzanie.
- Określ średnią cenę książki w każdej kategorii.
- Podaj cenę najmniej kosztownej książki w każdej kategorii.
Źródło: Niniejsze zadanie zostało zainspirowane książką „Oracle 11g SQL” autorstwa Johna Casteel.
Podsumowanie
Gratulacje, dotarłeś do końca tego tutoriala!
W tym tutorialu poruszyłeś wiele szczegółów dotyczących klauzuli GROUP BY i HAVING. Dowiedziałeś się czym jest klauzula GROUP BY i HAVING na przykładach, porównanie klauzuli HAVING i WHERE w SQL, GROUP BY z JOIN oraz porównanie GROUP BY z DISTINCT i ORDER BY. W ostatniej sekcji znajduje się zadanie praktyczne, które pozwoli ci ocenić twoją wiedzę.
Mam nadzieję, że teraz będziesz mógł wykorzystać GROUP BY i klauzulę HAVING do analizy własnych zbiorów danych. Dziękujemy za przeczytanie tego tutoriala!
Jeśli jesteś zainteresowany pogłębieniem wiedzy na temat SQL, weź udział w kursie DataCamp’s Intermediate SQLcourse.