Start > Kursy on-line > MS SQL Server Express

MS SQL Server Express


Agregacje w zapytaniach - klauzule HAVING, GROUP BY

Wspominając o klauzuli HAVING musimy wiedzieć, iż pełni ona bardzo podobną funkcję do WHERE jednak używana jest w odniesieniu do agregatów, dodatkowo agregat powinien występować wśród pól wyboru oraz zapytanie powinno mieć grupowanie (klauzula GROUP BY). Innymi słowy, czasami zachodzi konieczność zsumowania danych liczbowych w ramach określonego innego pola. Wówczas dla sumowanych wartości możemy użyć funkcji sum(), która oznacza sumę, natomiast wymiar wg, którego agregowane są dane, powinien znaleźć się na końcu zapytania:



Powyższy przykład prezentuje sumę ilości dla danego klienta. Teraz gdybyśmy chcieli nasze zapytanie ograniczyć, użyli byśmy klauzuli HAVING. Załóżmy, że interesują nas tylko wyniki o sprzedaży powyżej 9 sztuk:



Zauważmy, że klauzula HAVING znajduje się na końcu zapytania (w odróżnieniu od WHERE, która występuje zaraz po poleceniu FROM). Czytelnik może we własnym zakresie wypróbować działanie filtra agregatu z użyciem WHERE - nie będzie działać. Nic jednak nie stoi na przeszkodzie - aby użyć w naszym zapytaniu dodatkowo WHERE w odniesieniu do pola "klient":



Oczywiście taki filtr moglibyśmy też zdefiniować dla pola "produkt" lub dowolnego innego - jednak nie dla agregatów (do tego służy omówiona w tym rozdziale instrukcja HAVING).