Задача по sql, странное поведение case when
При решении одной из задач по sql на сайте https://www.sql-ex.ru/ в базе данных "Компьютерная фирма" решение заключалось в применении условий с помощью case when.
Меня интересует, почему данное условие не сработало, т.е. решение не прошло проверку на дополнительной базе?
select p.maker,case when max(case when t.price is null then 0 else 1 end)=1 then max(t.price) end as m_price from product p...`
хотя результат правильный,
а это решение правильное:
select p.maker,case when max(case when t.price is null then 1 else 0 end)=0 then max(t.price) end as m_price from product p...
т.е. разница всего лишь здесь:
case when max(case when t.price is null then 0 else 1 end)=1 then max(t.price) end
case when max(case when t.price is null then 1 else 0 end)=0 then max(t.price) end - второе условие правильный результат
ведь по идее не имеет значение где будет стоять 1 и 0 в условии then и else?
или нужно показать всю задачу?
Ответы (1 шт):
Разница есть
max(case when t.price is null then 1 else 0 end) = 0 - выполнится только если все t.price is NOT null
max(case when t.price is null then 0 else 1 end) = 1 - выполнится если хотя бы один t.price is NOT null
аналог Вашего второго должен вы глядеть как
min(case when t.price is null then 0 else 1 end) = 1 - выполнится только если все t.price is NOT null