难以计算简单查询

时间:2012-04-20 10:01:56

标签: mysql count

我有一张包含1118条记录的表格。在这些记录中,有一个字段flag,默认情况下为NULL。这些记录中的556个字段flag标记为true,而其余记录为NULL。 当我运行以下查询时:

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

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

NULL永远不会与任何东西相比,甚至不会与另一个NULL

相比
select count(*) from table_name where flag!='true' OR flag IS NULL

select count(*) from table_name where flag IS NULL

这取决于除了truefalse?)之外还有其他值以及NULL

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 / not null值

答案 1 :(得分:0)

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

SELECT COUNT(*) FROM TABLE_NAME WHERE flag IS NULL