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.

code-113611_1920

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

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

ID Imie Nazwisko Miasto
1 Jan Kowalski Warszawa
2 Michał Łagoda Kraków
3 Marcin Kulczyk Kraków
4 Radosław Sikorski Kraków
5 Monika Kopacz Gdańsk
6 Piotr Grabiec Toruń
7 Ewa Pogodna Bydgoszcz
8 Sebastian Szybki Warszawa

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

Efekt:

Miasto
Kraków
Warszawa

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

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”:

Efekt:

Imie Nazwisko Miasto
Radosław Sikorski Krakó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.

, , , , ,