比方说,我有表
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查询。
您可以使用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(*),因此它将真正使一个计数。
如果它是确定与采用分组,你可以尝试这样的解决方案:
SELECT ISNULL(ref),COUNT(*) FROM TABLE GROUP BY ISNULL(ref)
至少它告诉你有多少行与裁判空你。 该解决方案(好不好),可以与选择的名称GROUP_CONCAT的,如果你需要选择每一个人的名字被延长。
我认为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的每一行,然后合计起来,让“一”的总数。