Php 不考虑空单元的SQL AVG函数

Php 不考虑空单元的SQL AVG函数,php,mysql,sql,Php,Mysql,Sql,我有一个数据库表,其中一些单元格是空的。我想得到所有列的平均值,但出于某种原因,空单元格也会被计数 一列有5个空单元格,是100的5倍。所以平均值应该是100,但我得到了50。我尝试了COALESCE、NVL和“WHERE column NOT NULL”,但没有得到我想要的结果。其他单元格的值为0,必须对这些单元格进行计数 这是我的查询(基于复选框选择) 在大多数正常情况下,你都是错的。如果值真的是NULL,则忽略它们。因此,如果表中有10行包含此数据: value 100 100 100 1

我有一个数据库表,其中一些单元格是空的。我想得到所有列的平均值,但出于某种原因,空单元格也会被计数

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

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


在大多数正常情况下,你都是错的。如果值真的是
NULL
,则忽略它们。因此,如果表中有10行包含此数据:

value
100
100
100
100
100
null
null
null
null
null
平均值是100。这就是MySQL的工作原理。这就是SQL的工作原理<在聚合函数中忽略代码>空值值

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

  • 该列是一个字符串
  • 值是
    'null'
    (字符串),而不是
    null
在这种情况下,
'null'
值被隐式转换为数字,用于数值计算。给定的值为零

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


是一把小提琴。

是的,这就是我感到困惑的原因。不过,这些单元格实际上是空的。数据类型是varchar,这是问题所在吗?将其更改为十进制可以解决此问题吗?空的varchar值(即像
'
''这样的空字符串)可能会被解释为0,正如他在回答中提到的@GordonLinoff。尝试将这些空字符串设置为NULL,它应该可以根据您的需要工作谢谢,我刚刚检查了,我确实输入了空字符串。将它们更改为NULL,现在可以工作了。现在有一件事,它们怎么会默认为空?我使用表单中的变量生成插入数据的sql语句。表单的某些部分可能对某些用户隐藏,因此在这种情况下,我将它们设置为空字符串。我尝试了$var=NULL;相反,但这不起作用。@JD26。默认值为
NULL
,除非您声明它们具有另一个
default
值。我知道。我的问题是这段代码
if(isset($\u POST['VP1']){$VP1=$\u POST['VP1'];}else{$VP1=”“;}$VP1稍后用于插入数据的sql查询。用NULL替换“”不起作用,删除整个代码也不起作用。
value
100
100
100
100
100
null
null
null
null
null