我有一个1118记录的表。在这些记录中有一个字段flag
,它默认为NULL。这些记录中有556个字段的flag
标记为true,其余为NULL。 当我运行以下查询:获取简单查询的计数困难
select count(*) from table_name where flag!='true'
我得到的结果为0。凡为实际的结果应该是1118-556即562
我到底做错了什么?
我有一个1118记录的表。在这些记录中有一个字段flag
,它默认为NULL。这些记录中有556个字段的flag
标记为true,其余为NULL。 当我运行以下查询:获取简单查询的计数困难
select count(*) from table_name where flag!='true'
我得到的结果为0。凡为实际的结果应该是1118-556即562
我到底做错了什么?
NULL从来没有比较任何东西,甚至不是另一个NULL
select count(*) from table_name where flag!='true' OR flag IS NULL
或
select count(*) from table_name where flag IS NULL
这要看你从true
有另一个值开(false
?)以及空值
select
count(CASE WHEN flag = 'true' THEN flag END) AS truecount,
count(CASE WHEN flag = 'false' THEN flag END) AS falsecount
count(*) - count(flag) AS NULLCount
from
table_name
最后,请参阅这些以了解COUNT和null/no吨空值
工作就像一个魅力。非常感谢你的帮助。真的很感激:) – Deepak 2012-04-20 10:22:22
在查询NULL将永远不会被任何布尔表达式除非提及明确的匹配:
SELECT COUNT(*) FROM TABLE_NAME WHERE flag IS NULL
使用TINYINT定义布尔情况下领域以及为1和0,0为空情况,1为真。 – Prix 2012-04-20 10:03:33