- 此问题在此处已有答案**:
MySQL AVG() return 0 if NULL(3个答案)
14小时前关门了。
我有下面的结构
id val
1 ...
.
.
2 ...
.
.
3 null
3 null
3 null
4 ...
.
.
基本上每个id都有多个值。一个id要么所有值都是整数,要么所有值都是空
我想要的是对val group by id执行聚合(如AVG)。如果该id有空值,我想在那里放置5。
1
SELECT id, (CASE SUM(val) WHEN null THEN 5 ELSE AVG(val) END) AS ac FROM tt GROUP BY id
> executes ELSE even for id = 3
在CASE中,应该有一个聚合函数,当对空值执行时会给出空值。
SELECT SUM(val) FROM tt WHERE id = 3
> null
它在这里给出了null,但是在main语句中不起作用。我猜它与等式的类型有关,因此尝试了WHEN IS NULL
,但是它是一个语法错误。
此外,是否有一些更标准的方法来指示一组值为全空,而不是使用SUM或MAX。
2条答案
按热度按时间l3zydbqr1#
可以使用
if
条件:检查此处:https://dbfiddle.uk/Uso9nNTM
cngwdvgl2#
你的
CASE
表达式的确切问题在于,在MySQL中检查null时,我们必须使用IS NULL
而不是equality。但是我们也可以只使用
COALESCE()
来为那些id
组分配一个平均值5。注意,
AVG()
函数默认忽略空值。因此,只有当id
组中的 every 记录的val
为空值时,表达式AVG(val)
才为空值。