SQL HAVING Clause

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

CUSTOMER

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.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Resultaat: 3 records
Count Country
11 Frankrijk
11 Duitsland
13 USA

CUSTOMER

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.
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ë

ORDER

Id

OrderDate

OrderNumber

CustomerId

TotalAmount

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

Probleem: Maak een lijst van alle klanten met gemiddelde bestellingen
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
1081.215000

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *