SQL AVG函数不考虑空单元格

时间:2020-01-11 23:08:06

标签: php mysql sql

我有一个数据库表,其中某些单元格为空。我想获取所有列的平均值,但是由于某些原因,空单元格也被计数。

一列有5个空单元格,是5乘以100的值。所以平均值应该是100,但我得到50。我尝试了COALESCE,NVL和“ WHERE column NOT NOT NULL”,但是那没有给我我想要的结果。其他单元格的值是0,必须计数。

这是我的查询(基于复选框选择)

foreach($_POST['aufg'] AS $value) {
            $sql .= "AVG({$value}1) as {$value}1, AVG({$value}2) as {$value}2, ";
        }

        $sql  = substr($sql, 0, -2);
        $sql .= " FROM table";

1 个答案:

答案 0 :(得分:1)

在大多数正常情况下,您根本是错误的。如果这些值是 really NULL,则将其忽略。因此,如果表有10行包含此数据:

value
100
100
100
100
100
null
null
null
null
null

平均为100。这就是MySQL的工作方式。这就是SQL的工作方式。聚合函数中将忽略NULL个值。

您所说的正确的一种情况是在以下情况下:

  • 该列是一个字符串。
  • 值是'null'(字符串)而不是值NULL

在这种情况下,'null'值被隐式转换为用于数字计算的数字。给出的值为零。

我不赞成这种可能性,因为数字应该存储为数字而不是字符串。

Here是db <>小提琴。