清单null和在MySQL查询不为空(Listing both null and not null

2019-08-01 03:45发布

比方说,我有表

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

我想计数和NULL 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查询。

Answer 1:

您可以使用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(*),因此它将真正使一个计数。



Answer 2:

如果它是确定与采用分组,你可以尝试这样的解决方案:

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

至少它告诉你有多少行与裁判空你。 该解决方案(好不好),可以与选择的名称GROUP_CONCAT的,如果你需要选择每一个人的名字被延长。



Answer 3:

我认为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()函数生成无论是0或1的每一行,然后合计起来,让“一”的总数。



文章来源: Listing both null and not null in mysql query
标签: mysql null