Junior
Kuo skiriasi WHERE ir HAVING konstrukcijos SQL?
sobes.tech AI
Atsakymas iš AI
WHERE filtruoja eilutes prieš grupavimą (GROUP BY), įtakodama, kurios eilutės dalyvaus agregatinių funkcijų skaičiavime. HAVING filtruoja grupes po grupavimo, remiantis agregatinių funkcijų rezultatais.
| Savybė | WHERE | HAVING |
|---|---|---|
| Pritaikymas | Individualioms eilutėms | Eilių grupėms |
| Apdorojimo laikas | Prieš GROUP BY | Po GROUP BY |
| Naudojimas | Su lentelės laukais, bet be agregatinių funkcijų | Su agregatinių funkcijų rezultatais arba GROUP BY laukais |
WHERE naudojimo pavyzdys:
SELECT produkto_pavadinimas, kaina
FROM produktai
WHERE category_id = 1; -- Filtruoja eilutes **prieš** grupavimą (jei reikėjo)
HAVING naudojimo pavyzdys:
SELECT category_id, COUNT(*) AS bendras_produktu_skaicius
FROM produktai
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtruoja grupes **po** bendro produkto skaičiaus skaičiavimo
Kombinuoto naudojimo pavyzdys:
SELECT category_id, AVG(kaina) AS vidutinė_kaina
FROM produktai
WHERE sandėlyje > 0 -- Filtruoja tik sandėlyje esančius produktus **prieš** grupavimą
GROUP BY category_id
HAVING AVG(kaina) < 100; -- Filtruoja grupes su vidutine kaina mažesne nei 100 **po** grupavimo ir vidurkio skaičiavimo