Klauzula SQL HAVING

Co robi klauzula HAVING w zapytaniu?

Klauzula HAVING jest podobna do klauzuli WHERE, ale operuje na pogrupowanych rekordach zwróconych przez GROUP BY.AVING odnosi się do podsumowanych rekordów grup, podczas gdy WHERE odnosi się do indywidualnych rekordów.
Zwrócone zostaną tylko grupy, które spełniają kryteria HAVING.

HAVING wymaga, aby klauzula GROUP BY była obecna.arówno WHERE jak i HAVING mogą być użyte w tym samym zapytaniu w tym samym czasie.

Składnia SQL HAVING

Ogólna składnia to

SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition
Ogólna składnia z ORDER BY to:
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition ORDER BY column-names

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

SQL GROUP BY

Przykłady SQL GROUP BY

Problem: Zestawić liczbę klientów w poszczególnych krajach.
Wyłącz tylko kraje, w których jest więcej niż 10 klientów.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Wynik: 3 rekordy
.

Count Kraj
11 Francja
11 Niemcy
13 USA

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

Problem: Wymień liczbę klientów w każdym kraju,
z wyjątkiem USA, posortowanych od najwyższego do najniższego.
Uwzględnij tylko kraje, w których jest 9 lub więcej klientów.
SELECT COUNT(Id), Country FROM Customer WHERE Country 'USA' GROUP BY CountryHAVING COUNT(Id) >= 9 ORDER BY COUNT(Id) DESC
Wynik: 3 rekordy

.

Count Kraj
11 Francja
11 Niemcy
9 Brazylia

ORDER

Id

OrderDate

OrderNumber

CustomerId

TotalAmount

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

Problem z wyborem dostawcy:

Klient

Kraj

Podać nazwę dostawcy.

Problem: Wymień wszystkich klientów, których średnia wartość zamówień
wynosi od 1000 do 1200 USD.
SELECT AVG(TotalAmount), FirstName, LastName FROM O JOIN Customer C ON O.CustomerId = C.Id GROUP BY FirstName, LastNameHAVING AVG(TotalAmount) BETWEEN 1000 AND 1200
Wynik: 10 rekordów
Średnia FirstName LastName
1081.215000 Miguel Angel Paolino
1063.420000 Isabel de Castro
1008.440000 Alexander Feuer
1062.038461 Thomas Hardy
1107.806666 Pirkko Koskitalo
1174.945454 Janete Limeira
1073.621428 Antonio Moreno
1065.385000 Rita Müller
1183.010000 José Pedro Freyre
1057.386666 Carine Schmitt

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *