Условная конструкция с оператором CASE
Вы уже умеете писать условия и отбирать нужные записи оператором
WHERE. Например, такой запрос выведет заказы на сумму меньше 5 долларов:SQL
Чтобы вывести информацию об остальных заказах, понадобится новый запрос. Но сравнивать две выдачи будет неудобно.
Поле
total хранит много количественных данных, но как их сравнить? Если брать каждое значение и сравнивать с другими, сложно добиться понятных результатов. Такие данные легче анализировать с помощью категорий. Тогда можно сравнивать не отдельные значения, а группы данных.В поле
total можно выделить категории в зависимости от суммы заказа. Заказ на сумму меньше 5 долларов будет «маленьким», от 5 до 10 долларов — «средним», а заказ на сумму 10 долларов и больше — «крупным». Оператор
WHERE с такой задачей не справится, ведь разделить на категории нужно одним запросом. В SQL запрос с несколькими условиями пишут с помощью оператора CASE. Условные конструкции в SQL состоят из проверяемого условия и результата, который возвращается в зависимости от условия. Так выглядит синтаксис условных конструкций в SQL:
- начало конструкции обозначают оператором
CASE; - после оператора
WHENпишут условие; - после оператора
THEN— возвращаемый результат; - а в конце указывают оператор
END.
Теперь можно разделить заказы на категории:
SQL
Конструкция с оператором
CASE выводит новое поле с результатом проверки условий. Это поле появляется только в выдаче, а оригинальная таблица остаётся без изменений. Если значение в проверяемом поле не удовлетворяет ни одному условию, результатом будет
NULL. Исключив из запроса выражение для маленьких заказов, можно получить такую таблицу:SQL
Все условия необязательно прописывать. Условную конструкцию можно дополнить выражением с оператором
ELSE: после оператора указывают результат на случай, если ни одно условие не выполнено.SQL
Важный момент — условия в запросе проверяются по порядку. Если условие выполнено, сразу выводится соответствующий результат, а остальные условия не проверяются.
Обратите внимание на таблицу, которая получилась в результате такого запроса:
SQL
Заказу в пятой записи присвоена категория
средний, а не крупный. Дело в том, что проверяемое значение в поле total удовлетворяет двум условиям сразу. Первое условие было выполнено, поэтому остальные условия не проверялись. Такой ситуации можно избежать, если правильно указать границы диапазона.