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 **после** груписања и израчунавања просека