我有一个带有一些数字的简单列,看起来像;
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.为什么这不起作用?
答案 0 :(得分:1)
平均计算中忽略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 :(得分:0)
您可以通过3种方式完成
<强> 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)))