5.1 HAR erklæring
Der er en anden nyttig operator i SQL, der bruges med GROUP BY
, den hedder HAVING
.
I sin betydning er den fuldstændig analog med operatøren WHERE
. Det giver dig kun WHERE
mulighed for at indstille et rækkefilter før gruppering, og med hjælpen HAVING
kan du indstille et filter, der anvendes på poster efter gruppering.
Den generelle visning af forespørgslen ved brug af gruppering og filtrering af grupperingsresultater er som følger:
SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition
HAVING
kan kun bruges, hvis anmodningen indeholder GROUP BY
.
Lad os skrive en forespørgsel, hvor vi viser antallet af ansatte medarbejdere efter år.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Og resultatet af denne forespørgsel:
ansættelsesår | Total |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Og nu udelukker vi årene, hvor der blev ansat en eller færre medarbejdere. Eksempel:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
Og resultatet af denne forespørgsel:
ansættelsesår | Total |
---|---|
2015 | 2 |
5.3 Rækkefølge for udførelse af erklæringer
For at skrive korrekte og effektive SQL-forespørgsler skal du forstå, hvordan de udføres af SQL-serveren.
Proceduren for at udføre handlinger er strengt reguleret og afhænger ikke af dit ønske. Du kan ikke omarrangere operatørerne og få en anden rækkefølge.
SQL-forespørgslen udføres i flere trin i denne rækkefølge.
- Trin 1 - hentning af rækker
- Først vælges alle rækker fra den angivne tabel.
- Derefter tilføjes beregnede felter til dem.
- Og så af alle rækkerne er der kun dem tilbage, der opfylder betingelsen
WHERE
- Fase 2 - gruppering
- Gruppering anvendes derefter på resultaterne.
- Under gruppering kan felter som f.eks
COUNT(*)
. - Til sidst anvendes et filter på grupperingsresultatet
HAVING
. - Trin 3 - sortering
- Rækkerne opnået i de foregående trin sorteres ved hjælp af
ORDER BY
.
Endelig kan resultatet trimmes med LIMIT
og OFFSET
.
GO TO FULL VERSION