Sobes.tech
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