gpt4 book ai didi

mysql - 计算三列的平均数

转载 作者:行者123 更新时间:2023-11-29 23:24:31 26 4
gpt4 key购买 nike

我正在尝试计算三列的平均数,但仅当列不为空且大于 0 时才在计算中包含该列;

例如平均值通常是

(column1 + column2 + column3) / 3

但如果column3为null或0,那么它将是

(column1 + column2 + column3) / 2 or (column1 + column2 ) / 2

我已经有了这个解决方案,但它还不完整。当其中一列为 0 时,平均值错误(默认为 0)

SELECT movie.title,
movie.imdbrating,
movie.metacritic,
tomato.rating,
((imdbrating + metacritic + tomato.rating)/3) as average
FROM movie, tomato
WHERE movie.imdbid = tomato.imdbid

我该如何实现这个?

最佳答案

我正在修复查询的其余部分,以使用表别名和正确的 join 语法。但 case 语句才是您真正需要的:

SELECT m.title, m.imdbrating, m.metacritic,
t.rating,
((case when imdbrating > 0 then imdbrating else 0 end) +
(case when metacritic > 0 then metacritic else 0 end) +
(case when t.rating > 0 then t.rating else 0 end) +
) / nullif(coalesce((imdbrating > 0), 0) + coalesce((metacritic > 0), 0) + coalesce((t.rating > 0), 0)), 0)
FROM movie m JOIN
tomato t
ON m.imdbid = t.imdbid;

分母使用方便的 MySQL 扩展,其中 bool 值在数字上下文中被视为 0 或 1。如果没有评级满足条件,nullif() 将返回 NULL。并且,对于 NULL 值,> 0 不成立。

关于mysql - 计算三列的平均数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com