Sobes.tech
Junior

Koja je razlika između konstrukcija WHERE i HAVING u SQL?

sobes.tech АИ

Одговор од АИ

WHERE филтрије редове пре груписања (GROUP BY), утичући на то који редови ће учествовати у агрегатним функцијама. HAVING филтрира групе после груписања, засновано на резултатима агрегатних функција.

Карактеристика WHERE HAVING
Примена На појединачним редовима На групама редова
Време обраде Пре GROUP BY После GROUP BY
Коришћење Са пољима из табеле, али без агрегатних функција Са резултатима агрегатних функција или пољима из GROUP BY

Пример употребе WHERE:

SELECT назив_производа, цена
FROM производи
WHERE category_id = 1; -- Филтрирамо редове **пре** груписања (ако је било)

Пример употребе HAVING:

SELECT category_id, COUNT(*) AS укупно_производа
FROM производи
GROUP BY category_id
HAVING COUNT(*) > 5; -- Филтрирамо групе **после** бројања укупног броја производа

Пример за заједничку употребу:

SELECT category_id, AVG(цена) AS просечна_цена
FROM производи
WHERE залиха > 0 -- Филтрирамо само производе на стању **пре** груписања
GROUP BY category_id
HAVING AVG(цена) < 100; -- Филтрирамо групе са просечном ценом мањом од 100 **после** груписања и израчунавања просека