Краткое руководство по операторам IF, CASE и IFNULL

Хотя SQL не является языком общего назначения, он включает условные операторы со структурой, аналогичной другим языкам. Классические операторы IF и CASE позволяют изменять данные на уровне запроса, а не изменять их в другой среде, такой как рабочий лист или фрейм данных.

Хотя ни одно из этих утверждений не сложно освоить, особенно после знакомства с языками программирования, они предлагают достаточную мощность и гибкость для изменения результатов запроса. Чтобы продемонстрировать, как можно использовать эти операторы, будет создана простая таблица с подробным описанием идентификатора продаж, недели, отдела и дохода.

CREATE TABLE SALES_2021(
sales_id INTEGER PRIMARY KEY AUTOINCREMENT,
week INTEGER,
department VARCHAR(255),
revenue INTEGER
);

Заявление ЕСЛИ

Самая простая форма оператора IF в SQL очень похожа на условные операторы в большинстве программ для работы с электронными таблицами.

IF(condition, True, False) from table;

Простой оператор IF вводит некоторое условие, а затем возвращает результат в зависимости от того, является ли условие истинным или ложным. Когда условие истинно, возвращается второй параметр, а если ложно — третий параметр. Обратите внимание, что вместо оператора IF в некоторых реализациях используется оператор IIF, но он работает точно так же.

Чтобы привести более конкретный пример, предположим, что заинтересованная сторона запрашивает разбивку того, достигалась ли каждая неделя цели отдела в размере 5000 долларов дохода. Их не обязательно заботит сумма дохода отдела. Их волнует только то, достигли ли они цели.

Кроме того, им не нужен отфильтрованный список недель, когда они достигли своей цели. Им нужен полный список всех 52 недель и статус их цели дохода.

SELECT department, week, 
IF(revenue > 5000, 'Met', 'Not Met') as 'Goal' 
FROM SALES_2021;

Оператор SELECT возвращает отдел и неделю, как и ожидалось, но также включает оператор IF. Первый параметр вводит условие того, превышает ли доход 5000 долларов США. Когда цель дохода достигнута, возвращается второй параметр «Выполнено» и «Не выполнено», если не достигнуто. Чтобы сделать результирующий запрос более читабельным, к оператору IF добавляется псевдоним.

Результирующий запрос возвращает отдел, неделю и достижение цели, как указано заинтересованным лицом.

Заявление CASE

Хотя оператор IF предоставляет базовый условный оператор, он не поддерживает несколько условий. В этом случае необходимо использовать оператор CASE.

CASE field
WHEN expression_1 THEN statement_1
WHEN expression_2 THEN statement_2
ELSE statement_3
END
FROM table;

CASE начинается с указания поля в таблице. Операторы WHEN…THEN затем создают определенное условие и оператор возврата. Когда expression_1 истинно, возвращается statement_1. То же самое относится к выражение_2 и оператор_2.

Если ни один из вариантов не выполнен, необязательный оператор ELSE, иногда называемый вариантом по умолчанию, возвращает оператор_3. Обратите внимание, что оператор CASE должен быть закрыт с помощью END.

Предположим, заинтересованное лицо предпочитает просматривать данные с кодами отделов, а не с названием отдела. В этом случае они хотят видеть Юридический отдел как LEG, Собственность как PRO, а Менеджмент как MAN.

SELECT week, revenue, 
CASE department 
WHEN 'Legal' THEN 'LEG' 
WHEN 'Property' THEN 'PRO' 
WHEN 'Management' THEN 'MAN' 
END as 'department code' 
FROM SALES_2021;

Учитывая, что эти запросы могут быстро стать сложными, часто предлагается использовать необязательные пробелы, чтобы сделать их более читабельными.

SELECT week, revenue, 
    CASE department 
        WHEN 'Legal' THEN 'LEG' 
        WHEN 'Property' THEN 'PRO' 
        WHEN 'Management' THEN 'MAN' 
    END as 'department code' 
FROM SALES_2021;

Обратите внимание, что оператор CASE указывает поле отдела. Следовательно, в следующих предложениях WHEN…THEN условие также применяется к записи в поле отдела. Когда отдел равен «Юридический», возвращается «LEG». То же самое относится к «Имуществу» и «ПРО», «Управлению» и «ЧЕЛОВЕКУ». END закрывает оператор CASE и включает псевдоним, чтобы сделать результаты более читабельными.

В результате запрос возвращает код отдела вместо названия отдела.

Хотя этот пример представляет собой простой случай для данных с точными равенствами, предположим, что заинтересованная сторона хочет оценить доход отдела как высокий, средний или низкий.

SELECT week, revenue, 
    CASE 
        WHEN revenue > 6000 THEN 'High' 
        WHEN revenue < 3000 THEN 'Low' 
        ELSE 'Medium' 
    END as 'Revenue Rating' 
FROM SALES_2021;

Этот запрос следует тому же базовому шаблону, за исключением того, что оператор CASE явно не указывает, что он применяется к полю дохода. Вместо этого в каждом операторе WHEN…THEN… выражение включает явное сравнение с полем дохода.

В этом сценарии запрос возвращает значение «Высокий», если доход превышает 6000 долларов США, и «Низкий», если доход ниже 3000 долларов США. ELSE вернет любое другое количество как «Среднее», поскольку оно должно находиться в диапазоне от 3000 до 6000 долларов США включительно.

Оператор IFNULL

Специалисты по данным часто беспокоятся, когда в данных встречаются нулевые значения. Они часто представляют собой неполную информацию или ошибки, которые необходимо устранить при очистке данных.

Учитывая высокую потребность в подтверждении нулевых значений, SQL предлагает оператор IFNULL, чтобы отметить их появление.

IFNULL(field, expression) FROM table;

IFNULL принимает два параметра. Первый параметр указывает поле в таблице, а второй параметр дает возвращаемое значение, если запись имеет значение null.

Предположим, добавлен новый отдел, Налоговый, но в начальной записи его данных отсутствует имя, поэтому оно остается пустым. Простой оператор IFNULL заполнит эту информацию в момент запроса данных.

SELECT week, IFNULL(department, 'Tax') as 'department', revenue 
FROM SALES_2021;

Оператор SELECT содержит функцию IFNULL, которая определяет, является ли запись в поле отдела нулевым значением. Если это так, он возвращает «Налог». Кроме того, псевдоним добавляется, чтобы сделать его более читаемым.

В последней строке изначально отсутствовал какой-либо отдел, но запрос добавил налоговый отдел, что упростило процесс очистки данных.

Выводы

SQL упрощает добавление условных операторов к запросам. С их помощью специалисты по данным могут начать внедрять логику в свои запросы. Создавая основу для дополнительной сложности, они позволяют более сложным методам изменять и просматривать информацию в базе данных.