Junior
Каква е разликата между конструкциите WHERE и HAVING в SQL?
sobes.tech AI
Отговор от AI
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 **след** групирането и изчисляването на средната стойност