Count(*)不使用where子句

时间:2012-02-03 10:42:00

标签: sql count where

我正试图编写一个相当基本的查询问题。

select count (p_id) as mycustomer from person where date_active = null;

哪个不起作用。 (运行,但返回0)但是,下面的语句会(并返回一个数字),任何人都可以帮忙吗?

select count (p_id) as mycustomer from person wher date_active > '1-MAY-09';

我试图在表中找到date_active为null的p_id总数。 (他们确实存在,我可以看到他们!) 感谢

6 个答案:

答案 0 :(得分:4)

我认为您需要使用:

select count (p_id) as mycustomer from person where date_active is null;

答案 1 :(得分:1)

尝试以下

select count (p_id) as mycustomer from person where date_active is null;

= null不正确,无法执行您想要的操作。这个link提供了更多详细信息

答案 2 :(得分:1)

select count (p_id) as mycustomer from person where date_active IS null;

(注意IS NULL运算符而不是=)

答案 3 :(得分:1)

您必须使用is oprator找到null:

select count (p_id) as mycustomer from person where date_active is null;

NULL不是一个值(它表示缺少一个值),所以你不能使用像=,!=,<,>这样的标量操作符。与NULL结合使用。

答案 4 :(得分:1)

这应该有效:

select count (p_id) as mycustomer from person where date_active IS null;

答案 5 :(得分:0)

SQL不适用于二进制逻辑(仅truefalse)。它适用于(至少)三元逻辑(truefalsenull)。第三个值使逻辑条件的评估变得复杂(如条件中的=) 基本上,任何涉及null的表达式都将返回一个空值,并且由于null永远不会true,查询将不会返回任何行,就像你写的那样

select count (p_id) as mycustomer from person where 1 = 2

要解决此问题,有一些特殊的语法结构,最常见的是is nullis not null条件。正如其他答案指出的那样,要获得需要编写的空值

select count (p_id) as mycustomer from person where date_active is null

关于空值的有趣之处在于它们既不等于也不等于其他空值。

select * from person where null=null

select * from person where null!=null

两者都不会返回任何行。