5.1 HEBBEN verklaring
Er is nog een handige operator in SQL die wordt gebruikt met GROUP BY
, het heet HAVING
.
In zijn betekenis is het volledig analoog aan de operator WHERE
. U kunt alleen WHERE
een rijfilter instellen voordat u groepeert, en met de hulp HAVING
kunt u een filter instellen dat wordt toegepast op records na groepering.
De algemene weergave van de query bij het gebruik van groeperen en filteren van groeperingsresultaten is als volgt:
SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition
HAVING
kan alleen worden gebruikt als het verzoek GROUP BY
.
Laten we een query schrijven waarin we het aantal ingehuurde werknemers per jaar weergeven.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
En het resultaat van deze vraag:
huur_jaar | totaal |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
En nu sluiten we daarvan de jaren uit waarin een of minder medewerkers zijn aangenomen. Voorbeeld:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
En het resultaat van deze vraag:
huur_jaar | totaal |
---|---|
2015 | 2 |
5.3 Volgorde van uitvoering van verklaringen
Om correcte en efficiënte SQL-query's te schrijven, moet u begrijpen hoe ze worden uitgevoerd door de SQL-server.
De procedure voor het uitvoeren van acties is strikt gereguleerd en is niet afhankelijk van uw wens. U kunt de operators niet herschikken en een andere volgorde krijgen.
De SQL-query wordt in deze volgorde in verschillende fasen uitgevoerd.
- Fase 1 - rijen ophalen
- Eerst worden alle rijen uit de opgegeven tabel geselecteerd.
- Vervolgens worden er berekende velden aan toegevoegd.
- En dan blijven van alle rijen alleen die over die aan de voorwaarde voldoen
WHERE
- Fase 2 - groepering
- Groepering wordt vervolgens toegepast op de resultaten.
- Tijdens het groeperen worden velden zoals
COUNT(*)
. - Ten slotte wordt er een filter toegepast op het groeperingsresultaat
HAVING
. - Fase 3 - sorteren
- De rijen die in de vorige stappen zijn verkregen, worden gesorteerd met
ORDER BY
.
Ten slotte kan het resultaat worden bijgesneden met LIMIT
en OFFSET
.
GO TO FULL VERSION