Autor: 12.04.2023
SQL - jak używać klauzuli HAVING
W języku SQL często tworzymy zapytania grupujące dane. Jeśli masz jakieś podstawowe doświadczenie z tym językiem, to pewnie kojarzysz klauzulę GROUP BY.
Czasami do naszego grupowania chcemy dodać jakieś kryterium - innymi słowy, chcemy grupować takie dane, które spełniają określone warunki. W tym celu możemy posłużyć się klauzulą HAVING. W tym artykule pokażemy podstawy użycia HAVING, z pomocą prostego przykładu. Zaczynamy!
Tabela
Najpierw popatrz na przykładową tabelę:
Tabele ma nazwę orders. Zawiera trzy kolumny: unikalny identyfikator, id klienta (customer_id) oraz łączną wartość zamówienia (total_price). Nie ma tu nic szczególnie skomplikowanego.
Zauważ, że niektórzy klienci dokonali kilku zamówień. Najpierw zgrupujemy dane, używając w tym celu kolumny customer_id. Dzięki temu będziemy wiedzieć, jaka jest łączna wartość zamówień dla danego klienta. Zgrupujemy dane według kolumny customer_id i za pomocą funkcji SUM() obliczymy sumę wartości w kolumnie total_price, dla każdego unikalnego klienta:
SELECT customer_id, SUM(total_price) as total
FROM orders
GROUP BY customer_id;
Wynik wygląda tak:
Nasz wynik to czwórka unikalnych klientów, którzy dokonali zamówień.
Klauzula HAVING
Chcemy grupować tylko tych klientów, którzy dokonali zamówień na łączna kwotę przekraczającą 1000. W tym celu użyjemy klauzuli HAVING. Popatrz na zapytanie:
SELECT customer_id, SUM(total_price) as total
FROM orders
GROUP BY customer_id
HAVING SUM(total_price) > 1000;
Ostatnią linię HAVING SUM(total_price) > 1000 należy interpretować następująco: “uwzględnij tylko tych klientów, którzy mają sumę zamówień (czyli wartość SUM(total_price)) większą od 1000”. Wynik naszego zapytania to dwóch klientów: 101 oraz 103. Popatrz na tabelę - tylko ci klienci mają sumę przekraczającą 1000.
Oczywiście kryteria można dowolnie zmieniać:
HAVING SUM(total_price) < 300;
Jaki wynik uzyskamy? Będą to klienci, którzy mają łączną kwotę zamówień mniejszą od 300. W naszej tabeli jest tylko jeden klient spełniający to kryterium: klient z id = 104.
Podsumowanie
Użycie klauzuli HAVING pozwala dodać kryteria do zgrupowanych danych. Możemy dzięki niej pogrupować dane spełniające określony warunek. Dlatego klauzuli HAVING używamy najczęściej w połączeniu z GROUP BY.
Chcesz poznać więcej przydatnych technik pracy z SQL? Z kursem Fundamenty SQL Level 3 opanujesz wiele praktycznych rozwiązań, które pozwoli ci swobodnie pracować z danymi. Wszystkiego nauczysz się z użyciem praktycznych zadań oraz ćwiczeń.