Geavanceerde groepering

Beschikbaar

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 WHEREeen rijfilter instellen voordat u groepeert, en met de hulp HAVINGkunt 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

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

  1. 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 voldoenWHERE
  2. 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.
  3. 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 LIMITen OFFSET.

Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen