Wat doet de HAVING clause in een query?
De HAVING clause is als WHERE maar werkt op gegroepeerde records die worden teruggegeven door een GROUP BY.
HAVING is van toepassing op samengevatte groepsrecords, terwijl WHERE van toepassing is op individuele records.
Alleen de groepen die voldoen aan de HAVING criteria zullen worden teruggegeven.
HAVING vereist dat er een GROUP BY clausule aanwezig is.
Zowel WHERE als HAVING kunnen tegelijkertijd in dezelfde query worden gebruikt.
De SQL HAVING syntax
De algemene syntax is
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition
De algemene syntax met ORDER BY is:
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition ORDER BY column-names
Id
FirstName
LastName
City
Country
Phone
SQL GROUP BY Voorbeelden
Probleem: Maak een lijst van het aantal klanten in elk land.
Alleen landen met meer dan 10 klanten.
Alleen landen met meer dan 10 klanten.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Resultaat: 3 records
Count | Country | 11 | Frankrijk |
---|---|
11 | Duitsland |
13 | USA |
Id
FirstName
LastName
City
Country
Phone
Probleem: Maak een lijst van het aantal klanten in elk land,
uitgezonderd de VS, gesorteerd van hoog naar laag.
Alleen landen met 9 of meer klanten.
uitgezonderd de VS, gesorteerd van hoog naar laag.
Alleen landen met 9 of meer klanten.
SELECT COUNT(Id), Country FROM Customer WHERE Country 'USA' GROUP BY CountryHAVING COUNT(Id) >= 9 ORDER BY COUNT(Id) DESC
Resultaat: 3 records
Count | Country |
---|---|
11 | France |
11 | Duitsland |
9 | Brazilië |
Id
OrderDate
OrderNumber
CustomerId
TotalAmount
Id
FirstName
LastName
City
Country
Phone
Probleem: Maak een lijst van alle klanten met gemiddelde bestellingen
tussen $1000 en $1200.
tussen $1000 en $1200.
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
Resultaat: 10 records
Gemiddelde | Voornaam | Latijnaam |
---|---|---|
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 |