mysql - 计算三列的平均数

标签 mysql sql

我正在尝试计算三列的平均数,但仅当列不为空且大于 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/

相关文章:

Mysql即使数据不存在也选择按月记录

php - SQL如何查出数据位于哪个表

MySQL 连接查询与 JSON 字段类型

mysql - 如何为一对多映射记录编写查询

sql - 如何同时IN和NOT IN

MySQL 用联合选择层次结构

mysql - 从具有多行结果的子查询结果中搜索关键字

sql - 如何在 MYSQL 中优化此查询?需要做什么

php - 无法让我的 PHP 文档连接到我的 xampp 服务器

sql - 是否可以使用 SQL 约束来防止在条件成立时更改特定值?