5.1 HAR uttalande
Det finns en annan användbar operator i SQL som används med , GROUP BY
den heter HAVING
.
I sin mening är det helt analogt med operatören WHERE
. Det låter dig bara WHERE
ställa in ett radfilter före gruppering, och med hjälpen HAVING
kan 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
HAVING
kan 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.
- 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 villkoret
WHERE
- Steg 2 - gruppering
- Gruppering tillämpas sedan på resultaten.
- Under gruppering kan fält som
COUNT(*)
. - Slutligen tillämpas ett filter på grupperingsresultatet
HAVING
. - Steg 3 - sortering
- Raderna som erhållits i de föregående stegen sorteras med
ORDER BY
.
Slutligen kan resultatet trimmas med LIMIT
och OFFSET
.