【发布时间】:2012-03-23 12:10:58
【问题描述】:
我有一张类似的桌子
+--+-----+----+
|ID|Entry|Exit|
+--+-----+----+
|18|32154|NULL|
+--+-----+----+
|19|NULL |NULL|
+--+-----+----+
当我选择 AVG(Entry) 时,它正确地给了我 32154,当我选择 AVG(Exit) 时,它会爆炸说“操作数数据类型 void 类型对 avg 运算符无效。”
如何将 NULL 作为只有 NULL 值的列的平均值?
谢谢,
【问题讨论】:
-
Exit是什么数据类型?正如错误消息中明确指出的,它的数据类型与 AVG 不兼容。
-
数据类型为float,错误信息提示void (NULL) 不兼容。这里的问题是 AVG(NULL) 返回错误而不是 NULL。
-
然后有些奇怪,因为错误中的“void type”表明这不是真正的表,而是派生表。见这里:blog.sqlauthority.com/2011/06/27/…
-
它改变了行为,因为您的子查询可能正在执行以下操作:
SELECT NULL AS Exit,没有为该列指定数据类型,这才是真正的问题。应该是这样的:SELECT CAST(NULL AS FLOAT) AS Exit而不是 -
我认为你需要强制转换为浮点数,因为所有值都是 null 并且无法推断类型。
标签: sql sql-server sql-server-2008 null average