Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Grupowanie danych: Klauzula HAVING w SQL cz. IV

Klauzula HAVING w SQL według ogólnego wzoru zapytań SELECT podanego w artykule „Podstawowa wersja zapytania SELECT w SQL (SELECT … FROM … WHERE …)” wykonywana jest po klauzuli GROUP BY, czyli po pogrupowaniu danych. Działa ona w zasadzie tak samo jak słowo kluczowe WHERE, z takim wyjątkiem, że przy WHERE nie mogliśmy używać funkcji grupującychfunkcji rankingu oraz operować na pogrupowanych danych. W klauzuli HAVING jest to wszystko dopuszczalne. W skrócie funkcja ta może zostać wykorzystana na przykład do wyeliminowania grup danych, które nie spełniają podanego po niej warunku logicznego.

Ogólna składnia zapytania SELECT zawierającego klauzulę HAVING:

SELECT kolumna1, kolumna2 FROM tabela
GROUP BY kolumna3
HAVING kolumna4 > 10; --warunek logiczny

Tabela klienci na której będziemy uruchamiać przykładowe zapytania:

IDImieNazwiskoMiasto
1JanKowalskiWarszawa
2MichałŁagodaKraków
3MarcinKulczykKraków
4RadosławSikorskiKraków
5MonikaKopaczGdańsk
6PiotrGrabiecToruń
7EwaPogodnaBydgoszcz
8SebastianSzybkiWarszawa

Pobierzmy z tabeli klienci miasta z których mamy przynajmniej dwóch klientów:

SELECT Miasto FROM klienci
GROUP BY Miasto
HAVING COUNT(*) > 1;

Efekt:

Miasto
Kraków
Warszawa

A teraz wykonajmy to samo zapytanie tylko zamiast HAVING użyjmy WHERE:

SELECT miasto FROM klienci
WHERE COUNT(*) > 1 -- BŁĄD!!!
GROUP BY miasto;

Oczywiście otrzymaliśmy błąd, gdyż jak wspomniałem na początku w klauzuli WHERE nie można używać funkcji grupujących i rankingowych.

Pobierzmy informacje o miastach w których mamy klienta o imieniu „Radosław”:

SELECT imie, nazwisko, miasto FROM klienci
GROUP BY miasto
HAVING imie = 'Radosław';

Efekt:

ImieNazwiskoMiasto
RadosławSikorskiKraków

Jak można się zorientować przerabiając powyższe przykłady, dane w naszym zapytaniu są najpierw grupowane, a potem wywoływana jest klauzula HAVING. Gdybyśmy użyli słowo kluczowe WHERE, to było by dokładnie na odwrót czyli grupowali byśmy tylko przefiltrowane wyniki co w niektórych przypadkach mogło by nam dać złe dane.

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , ,

Dodaj komentarz

Komentarze (1)

Odpowiedz

Twój adres e-mail nie zostanie opublikowany.

Pin It on Pinterest