Замена значений NULL на 0 в SQL запросе: SUM, CASE
Быстрый ответ
Для замены NULL
на 0
в SQL Server используйте функции COALESCE()
или ISNULL()
. Вот примеры их использования:
-- Замена NULL с помощью COALESCE
SELECT COALESCE(имя_столбца, 0) FROM имя_таблицы;
-- Замена NULL с помощью ISNULL
SELECT ISNULL(имя_столбца, 0) FROM имя_таблицы;
Обе функции позволяют заменить значение NULL
на 0
за время выполнения запроса.
Глублый разбор ISNULL
и COALESCE
Могучий ISNULL
Функция ISNULL
принимает на вход два аргумента: название столбца и значение для замены NULL
. Она вычисляется всего один раз за время выполнения SELECT-запроса, обеспечивая оптимальную производительность в некоторых случаях.
-- Объявляю: NULL будет повсеместно замещён «нулевыми героями»
SELECT ISNULL(имя_столбца, 0) FROM имя_таблицы;
Универсальность COALESCE
COALESCE
принимает неограниченное количество аргументов и возвращает первое не-NULL
значение из списка. Это добавляет гибкости в ваш код.
-- Достучаться до значений: точно не до NULL
SELECT COALESCE(столбец_один, столбец_два, 0) FROM имя_таблицы;
Но помните: COALESCE
, проверяя каждый параметр, может слегка замедлить выполнение запроса.
Тюнинг производительности
ISNULL
работает быстрее при больших объёмах данных, поскольку значение вычисляется единожды. В то время как COALESCE
, проверяя каждый параметр по одному, может уменьшить производительность.
Избегайте NULL
в агрегатных функциях
Внутри функции SUM()
используйте ISNULL
, чтобы значения NULL
не искажали общий результат. Таким образом, вы получите корректные итоги.
-- Подсчитываем итоги исключая NULL-значения
SELECT SUM(ISNULL(имя_столбца, 0)) FROM имя_таблицы;
Визуализация
Рассмотрим результат SQL-запроса как ряд товаров на полке магазина:
На полке располагаются: [🍎, 🍌, NULL, 🍇]
В этом контексте, замена NULL
на 0
в SQL – это как замещение пустого места на полке заглушкой-товаром:
-- На полку нет пустых мест!
SELECT ISNULL(фрукт, 0) FROM полка_с_товарами;
Теперь каждый промежуток на полке заполнен:
Полка полностью укомплектована: [🍎, 🍌, 🥫, 🍇]
Где 🥫 symbolizes '0', и теперь каждое пространство занято!
Обсудим замену NULL нулем непосредственно в таблицах
Иногда эффективнее обновить таблицы, заменив значения NULL
на 0
напрямую. Это исключит необходимость использования ISNULL
или COALESCE
в последующих запросах:
-- NULL, ваш переезд настал. Ваше место займёт Ноль
UPDATE имя_таблицы
SET имя_столбца = ISNULL(имя_столбца, 0);
Направленные действия с CASE
для разнообразных условий
Когда вы прорабатываете различные статусы выполнения, CASE
поможет провести условное подсчёт:
-- На месте, готов… Погнали! Но подождите, где NULL?
SELECT CASE
WHEN статус_запуска IS NULL THEN 0
ELSE статус_запуска
END
FROM запуски;
Этот метод предлагает вам гибкость в замене NULL
на ноль, согласно ваших требований.
Ответственность за соответствие типов данных
При использовании ISNULL
или COALESCE
всегда убедитесь, что типы данных аргументов согласованы. Несоответствие может привести к непредвиденным ошибкам или результатам.
Полезные материалы
- COALESCE (Transact-SQL) – SQL Server | Microsoft Learn — глубокое погружение в функционал COALESCE в SQL Server.
- ISNULL (Transact-SQL) – SQL Server | Microsoft Learn — детальный разбор функции ISNULL в SQL Server.
- CASE (Transact-SQL) – SQL Server | Microsoft Learn — подробное руководство по использованию выражения CASE в SQL Server.
- Using ISNULL vs using COALESCE for checking a specific condition? – Stack Overflow — сравнение ISNULL и COALESCE в SQL Server на сайте Stack Overflow.
- The Many Uses of Coalesce in SQL Server — обширный обзор способов использования функции COALESCE.
- SQL Server: ISNULL Function — применение функции ISNULL в SQL Server, подробная информация.