MySQL HAVING-lause: erinevus WHERE-lausega ja näited

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 koos GROUP 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ärgmist SUM 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.
Näiteks, kui päringus kombineeritakse WHERE- ja HAVING-lauseid, filtreeritakse kõigepealt 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 nagu SUM või COUNT. Individuaalsete ridade tingimuste jaoks on sobiv kasutada WHERE lauset.

Aliaste kasutamine

HAVING lauses saab kasutada AS 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.

6. Kokkuvõte: HAVING-klausli kasutamine

HAVING-klausel on võimas tööriist, mis võimaldab paigutada tingimusi koondandmetele ja filtreerida andmeid paindlikult. E kui analüüsida koondandmeid nagu müük või tellimuste arv, võimaldab HAVING-klausli kasutamine tõhusat andmeanalüüsi. Mõistes erinevusi WHERE-klausliga ja kasutades neid õigesti koos, saab SQL-päringu paindlikkust maksimaalselt suurendada.