在mysql查询中列出null和not null

时间:2009-08-13 09:05:53

标签: mysql null

假设我有桌子

NAME | ID | REF  
foo1 | 1 | NULL  
foo2 | 2 | 1234  
foo2 | 3 | 567  
foo1 | 4 | NULL  
foo3 | 5 | 89  

我想在一个查询中计算所有NULL和NOT NULL的实例,以便我可以说

NAME | null | not null  
foo1 |  0   |   2  
foo2 |  2   |   0  
foo3 |  0   |   1

我可以运行这两个查询

select NAME,count(*) from TABLE where REF is not null  
select NAME,count(*) from TABLE where REF is null

但我确信在一个mysql查询中必须有一个简单的方法。

3 个答案:

答案 0 :(得分:10)

您可以像这样在ISNULL()上使用SUM()

select NAME, sum(isnull(REF)) as is_null, sum(not isnull(REF)) as is_not_null from TABLE group by NAME;

SUM(1)相当于COUNT(*),因此它将真正计算。

答案 1 :(得分:1)

如果使用分组的解决方案没问题,您可以尝试以下方法:

SELECT ISNULL(ref),COUNT(*) FROM TABLE GROUP BY ISNULL(ref)

至少它告诉你你在ref中有多少行为NULL。 如果您需要选择每个单独的名称,可以通过在NAME上选择GROUP_CONCAT来扩展此解决方案(好与否)。

答案 2 :(得分:0)

我认为MySQL有一个IF()函数,所以你可以写:

SELECT Name, SUM(IF(ISNULL(Ref), 1, 0)) AS NullCount,
       SUM(IF(ISNULL(Ref), 0, 1)) AS NotNullCount
FROM Table GROUP BY Name

因此,您使用IF()函数为每行生成零或一,并将它们相加以获得“一”的总数。