2012-04-20 43 views
0

我有一个1118记录的表。在这些记录中有一个字段flag,它默认为NULL。这些记录中有556个字段的flag标记为true,其余为NULL。 当我运行以下查询:获取简单查询的计数困难

select count(*) from table_name where flag!='true' 

我得到的结果为0。凡为实际的结果应该是1118-556即562

我到底做错了什么?

+0

使用TINYINT定义布尔情况下领域以及为1和0,0为空情况,1为真。 – Prix 2012-04-20 10:03:33

回答

2

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吨空值

+0

工作就像一个魅力。非常感谢你的帮助。真的很感激:) – Deepak 2012-04-20 10:22:22

0

在查询NULL将永远不会被任何布尔表达式除非提及明确的匹配:

SELECT COUNT(*) FROM TABLE_NAME WHERE flag IS NULL