Blog JSystems - uwalniamy wiedzę!

Szukaj

W skrócieHAVING filtruje wynik po grupowaniu, czyli tam, gdzie WHERE już nie sięga. WHERE działa przed grupowaniem i nie przyjmuje warunków opartych na funkcjach grupowych, więc warunek w rodzaju „grupa ma więcej niż dziesięć wierszy" zapisujesz właśnie w HAVING.

Przed dokonaniem grupowania można zastosować klauzulę where, która wybierze tylko część wierszy z tabeli. Klauzula where wykonuje się przed grupowaniem, a zatem nie można w tej klauzuli sprecyzować warunku zawierającego funkcje grupowe. Aby taki warunek zawrzeć w zapytaniu należy zastosować dodatkową klauzulę having wraz z odpowiednim warunkiem. Jest ona odpowiednikiem klauzuli where, tylko, że wykonuje się ona po procesie grupowania. Stanowi ona wsparcie dla agregacji.

 select count(*) IlośćWierszy, ProductCategoryID, from SalesLT.Product group by ProductCategoryID, having count(*)>10;

76.jpg (760×350)

Wyświetlona została ilość wierszy , która została pogrupowana z uwzględnieniem odpowiedniego identyfikatora kategorii produktu, a następnie pozostawione wyniku wyświetlenia zostały jedynie rekordy, gdzie podliczona ilość wierszy wynosiła więcej niż 10.

 

Najczęściej zadawane pytania

Czym różni się klauzula HAVING od WHERE?
Klauzula WHERE wykonuje się przed grupowaniem i wybiera część wierszy z tabeli, dlatego nie może zawierać warunków opartych na funkcjach grupowych. HAVING jest jej odpowiednikiem wykonywanym po procesie grupowania i pozwala nałożyć warunek na wynik agregacji.
Dlaczego nie można użyć funkcji grupowej w klauzuli WHERE?
Ponieważ WHERE działa przed grupowaniem, na etapie, gdy grupy i ich agregaty jeszcze nie istnieją. Warunek oparty na funkcji grupowej, na przykład na liczbie wierszy w grupie, trzeba więc umieścić w klauzuli HAVING, która wykonuje się po grupowaniu.
Jak wygląda przykładowe użycie HAVING?
W zapytaniu grupujesz dane, na przykład po identyfikatorze kategorii produktu, a następnie w klauzuli HAVING podajesz warunek na agregacie, na przykład count(*) większe niż 10. W wyniku pozostają tylko grupy, które ten warunek spełniają.
Czy HAVING można stosować bez grupowania?
HAVING stanowi wsparcie dla agregacji i jest przeznaczone do filtrowania wyników po grupowaniu. W praktyce stosuje się je razem z grupowaniem danych, aby ograniczyć zestaw wynikowy na podstawie wartości funkcji grupowych.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...