5.1 HAR uttalande

Det finns en annan användbar operator i SQL som används med , GROUP BYden heter HAVING.

I sin mening är det helt analogt med operatören WHERE. Det låter dig bara WHEREställa in ett radfilter före gruppering, och med hjälpen HAVINGkan du ställa in ett filter som tillämpas på poster efter gruppering.

Den allmänna vyn av frågan när du använder gruppering och filtrering av grupperingsresultat är som följer:

SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition

HAVINGkan endast användas om begäran innehåller GROUP BY.

Låt oss skriva en fråga där vi visar antalet inhyrda medarbetare per år.

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

Och resultatet av denna fråga:

hyra_år total
2012 1
2013 1
2014 1
2015 2
2018 1

Och nu utesluter vi från det åren då en eller färre anställda anställdes. Exempel:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1

Och resultatet av denna fråga:

hyra_år total
2015 2

5.3 Ordning för utförande av uttalanden

För att skriva korrekta och effektiva SQL-frågor måste du förstå hur de exekveras av SQL-servern.

Förfarandet för att utföra åtgärder är strikt reglerat och beror inte på din önskan. Du kan inte ordna om operatörerna och få en annan ordning.

SQL-frågan exekveras i flera steg i denna ordning.

  1. Steg 1 - hämtning av rader
    • Först väljs alla rader från den angivna tabellen.
    • Sedan läggs beräknade fält till dem.
    • Och sedan av alla rader återstår bara de som uppfyller villkoretWHERE
  2. Steg 2 - gruppering
    • Gruppering tillämpas sedan på resultaten.
    • Under gruppering kan fält som COUNT(*).
    • Slutligen tillämpas ett filter på grupperingsresultatet HAVING.
  3. Steg 3 - sortering
    • Raderna som erhållits i de föregående stegen sorteras med ORDER BY.

Slutligen kan resultatet trimmas med LIMIToch OFFSET.