У меня есть простая колонка с некоторыми номерами, которая выглядит;
133
8
55
11
NULL
NULL
235
NULL
Я хочу поставить значение по умолчанию при выборе этого столбца с целью замены нулей. Я сделал;
CASE
WHEN round(avg(s.seconds)) IS NULL THEN 0
ELSE round(avg(s.seconds))
END as 'seconds'
Однако мои значения остаются. Я ожидаю, что они будут установлены в 0. Почему это не работает?
Значения NULL игнорируются при средних вычислениях.
Если вы хотите заменить значения NULL на 0 в среднем, вам необходимо использовать COALESCE для значений внутри средней функции. Пример:
DROP TEMPORARY TABLE IF EXISTS TEMP1;
CREATE TEMPORARY TABLE TEMP1
SELECT 1 AS price
UNION ALL SELECT NULL AS price
UNION ALL SELECT NULL AS price
UNION ALL SELECT 3 AS price;
SELECT * FROM TEMP1; # List values (1, NULL, NULL, 3)
SELECT AVG(price) FROM TEMP1; # Returns 2 (NULL values IGNORED)
SELECT AVG(COALESCE(price,0)) FROM TEMP1; # Returns 1 (NULL values REPLACED with 0)
Вы можете сделать это тремя способами
1
round(avg(CASE
WHEN s.seconds IS NULL THEN 0
ELSE s.seconds
END)) as 'seconds'
2
Функция MySQL IFNULL() позволяет вернуть альтернативное значение, если выражение равно NULL:
round(avg(IFNULL(s.seconds,0)))
3
или мы можем использовать функцию COALESCE(), например:
round(avg(COALESCE(s.seconds,0)))