MySQL选择使用COUNT返回错误的NULL值

时间:2016-05-04 00:00:06

标签: mysql sql

假设我有一个users表,其中包含两列,idreferer_id

enter image description here

如果用户被其他人引用,则他的推荐人将在referer_id。如果他自己注册,那么referer_id将为NULL

我想计算一个用户有多少推荐用户。

我有这样的查询

SELECT `referer_id`,count(`referer_id`) FROM `users`
GROUP BY `referer_id`

enter image description here

正如您所看到的,NULL计数为0,但我有很多用户没有被任何人引用。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我不喜欢这样,我认为那里有一个更优雅的解决方案,但它可以帮助您找到更好的解决方案。

select 
  t1.id,
  ifnull(t3.ct, 0)
  from 
    temp t1
    left join 
      (select 
         t2.referer_id,
         count(t2.referer_id) as ct
         from temp t2
         group by t2.referer_id) t3
  on t1.id = t3.referer_id;

稍微考虑一下,这里有一个避免子选择的选项:

select t1.id, ifnull(count(t2.referer_id), 0)
from temp t1
left join temp t2 on t1.id = t2.referer_id
group by t1.id;

答案 1 :(得分:1)

即使我无法解释导致此问题的原因,我还是想出了另一个解决方案,就像这样;)

SELECT `referer_id`,
       if(`referer_id` is null, @num := @num + 1, count(`referer_id`)) as referer_id_cnt
FROM `users`, (select @num := 0) tmp
GROUP BY `referer_id`
嗯,我上面写的内容绝对不是一个正确的答案。实际上这对你有帮助。

SELECT `referer_id`,count(1) FROM `users`
GROUP BY `referer_id`

并查看此链接How to count NULL values in MySQL?

答案 2 :(得分:0)

SELECT `referer_id`,count(NVL(`referer_id`,0)) 
FROM `users`
GROUP BY `referer_id`