Предложение HAVING

Пусть требуется найти красные квадраты, т.е. квадраты, окрашенные только баллонами с красной краской и суммарным количеством краски, равным 255. Речь идёт о базе данных “Окраска”.

Эту задачу можно решить разными способами. Здесь мы приведём решение с использованием оператора CASE в предложении HAVING.

Идея состоит в следующем. Выполняя группировку по идентификатору квадрата, будем суммировать объем краски. При этом краску красного цвета будем добавлять со знаком “+”, а остальную - со знаком “-”. Поскольку краски каждого цвета на квадрате не может быть больше 255 единиц, то результат, равный в точности 255 говорит о том, что вся эта краска была красного цвета, и никакой другой использовано не было.

А вот и само решение:

select b_q_id
from utb join utv on v_id=b_v_id
group by b_q_id
having sum(case when v_color='R' then b_vol else -b_vol end) = 255;
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]