目次
1. Mis on HAVING-lause
HAVING-lause on süntaks, mida kasutatakse SQL-is andmete rühmitamise järel, et lisada tingimus nende koondamistulemustele. Tavaliselt kasutatakse seda koosGROUP BY
-lausega ning see täidab andmete filtreerimise rolli pärast koondamist. HAVING-lause kasutamisega on võimalik välja filtreerida ainult need rühmad, mis vastavad kindlale kriteeriumile. Näiteks kasutatakse HAVING-lause, kui soovitakse välja filtreerida kliendid, kelle müügi kogusumma ületab teatud summa, või rühmad, mille keskmine skoor ületab kindla taseme. WHERE
-lause lisab tingimuse üksikutele ridadele enne koondamist, samas kui HAVING-lause rakendab tingimuse koondatud tulemusele.HAVING-lause kasutusnäide
Näiteks päring, mis filtreerib kliendid, kelle müügi kogusumma ületab 10 000 jeeni, näeb välja järgnev.SELECT KliendiID, SUM(müük) AS Kogumüük
FROM Müügiteabel
GROUP BY KliendiID
HAVING SUM(müük) > 10000;
See päring kasutab SUM
-funktsiooni, et summeerida iga kliendi müük, ning filtreerib välja ainult need kliendid, kelle tulemus ületab 10 000 jeeni.2. HAVING lause põhiline süntaks ja kasutamine
HAVING lause põhiline süntaks on järgmine.SELECT veerg, aggregeerimisfunktsioon(veerg)
FROM tabeli_nimi
GROUP BY veerg
HAVING tingimusavaldis;
See süntaks grupib andmeid GROUP BY
lausega ja filtreerib HAVING
lausega määratud tingimuste alusel kokkuvõetud tulemusi. Näiteks päring, mis võtab müügitabelist välja kliendid, kelle tellimuste arv on vähemalt 5, on järgmine.SELECT KliendiID, COUNT(TellimuseID) AS TellimusteArv
FROM TellimusteTabel
GROUP BY KliendiID
HAVING COUNT(TellimuseID) >= 5;
Siin kasutatakse COUNT
funktsiooni, et lugeda iga kliendi tellimuste arv ja filtreerida ainult need kliendid, kelle tellimuste arv on vähemalt 5.
3. HAVING klausli rakendused
HAVING lause on tööriist, mis koos koondusfunktsioonidega aitab kaasa keerukale andmeanalüüsile. Allpool tutvustame mõnda konkreetset rakendust.Näide 1: Müügi kogusumma alusel filtreerimine
Müügi, mis ületab 10 000 jeeni, toodete väljavõtmiseks kasutatakse järgmistSUM
funktsiooni.SELECT TooteID, SUM(müük) AS KokkuMüük
FROM TooteTabel
GROUP BY TooteID
HAVING SUM(müük) > 10000;
See päring arvutab iga toote müügi kogusumma ja valib välja tooted, mille summa ületab 10 000 jeeni.Näide 2: Tellimuste arvu alusel filtreerimine
Kui konkreetne klient on teinud vähemalt 10 tellimust, valitakse see klient välja.SELECT KliendiID, COUNT(TellimuseID) AS TellimusteArv
FROM TellimusteTabel
GROUP BY KliendiID
HAVING COUNT(TellimuseID) > 10;
See päring arvutab iga kliendi tellimuste arvu ja valib välja ainult need kliendid, kes on teinud vähemalt 10 tellimust.4. WHERE-lause erinevus
HAVING-lause ja WHERE-lause mõlemad filtreerivad andmeid, kuid nende rakendamise aeg on erinev.Rakendamise aja erinevus
- WHERE-lause: rakendatakse andmete grupiseerimise enne, filtreerides üksikuid ridu.
- HAVING-lause: rakendatakse andmete grupiseerimise pärast ja filtreerib koondtulemusi.
WHERE
-lausega andmed, kus müük on vähemalt 1000 yen, ja seejärel HAVING
-lausega valitakse tulemused, kus kogumüük ületab 5 000 yen’i.SELECT KliendiID, SUM(Müük) AS Kogumüük
FROM MüükTabel
WHERE Müük >= 1000
GROUP BY KliendiID
HAVING SUM(Müük) > 5000;
Selles päringus rakendatakse WHERE
-lausega filtreeritud andmetele GROUP BY
ja HAVING
, et välja võtta ainult kliendid, kelle müük on vähemalt 5 000 yen.5. HAVING lause kasutamise tähelepanekud
Koondusfunktsioonidega kombineerimine on vajalik
HAVING lause filtreerib koondamistulemusi, seetõttu on vaja kombineerida seda koondusfunktsioonidega naguSUM
või COUNT
. Individuaalsete ridade tingimuste jaoks on sobiv kasutada WHERE lauset.Aliaste kasutamine
HAVING lauses saab kasutadaAS
abil määratud aliast tingimusavaldises. Näiteks on võimalik anda kogumüügi aliase ja kasutada seda järgmiselt.SELECT KliendiID, SUM(Müük) AS Kogumüük
FROM Müügiteabel
GROUP BY KliendiID
HAVING Kogumüük > 10000;
See päring valib kliendid, kelle kogumüük ületab 10 000 jeni.