Sobes.tech
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 **след** групирането и изчисляването на средната стойност