Junior
Mis vahe on WHERE ja HAVING SQL-is?
sobes.tech AI
Vastus AI-lt
WHERE filterdab read only enne ridaid enne gruppimise (GROUP BY), mõjutades, millised read osalevad aggregaatfunktsioonides. HAVING filterdab grupid pärast gruppimist, põhinedes aggregaatfunktsioonide tulemustel.
| Omadus | WHERE | HAVING |
|---|---|---|
| Rakendus | Üksikutele ridadele | Ridade gruppidele |
| Töötlemisaeg | Enne GROUP BY-d | Pärast GROUP BY-d |
| Kasutus | Tabeli väljadega, kuid ilma aggregaatfunktsioonideta | Aggregaatfunktsioonide või GROUP BY väljadega |
Näide WHERE kasutamisest:
SELECT toote_nimi, hind
FROM tooted
WHERE category_id = 1; -- Filtreerib read **enne** gruppimist (kui see oleks vajalik)
Näide HAVING kasutamisest:
SELECT category_id, COUNT(*) AS kogusumma_tooteid
FROM tooted
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtreerib grupid **pärast** kogusumma arvutamist
Kombineeritud näide:
SELECT category_id, AVG(hind) AS keskmine_hind
FROM tooted
WHERE laoseis > 0 -- Filtreerib ainult laos olevad tooted **enne** gruppimist
GROUP BY category_id
HAVING AVG(hind) < 100; -- Filtreerib grupid, mille keskmine hind on alla 100 **pärast** gruppimist ja keskmise arvutamist