Avanceret gruppering

Ledig

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 WHEREmulighed for at indstille et rækkefilter før gruppering, og med hjælpen HAVINGkan 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

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

  1. 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 betingelsenWHERE
  2. Fase 2 - gruppering
    • Gruppering anvendes derefter på resultaterne.
    • Under gruppering kan felter som f.eks COUNT(*).
    • Til sidst anvendes et filter på grupperingsresultatet HAVING.
  3. Trin 3 - sortering
    • Rækkerne opnået i de foregående trin sorteres ved hjælp af ORDER BY.

Endelig kan resultatet trimmes med LIMITog OFFSET.

Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu