假设我有一个users
表,其中包含两列,id
和referer_id
如果用户被其他人引用,则他的推荐人将在referer_id
。如果他自己注册,那么referer_id
将为NULL
我想计算一个用户有多少推荐用户。
我有这样的查询
SELECT `referer_id`,count(`referer_id`) FROM `users`
GROUP BY `referer_id`
正如您所看到的,NULL计数为0,但我有很多用户没有被任何人引用。我该如何解决这个问题?
答案 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`
答案 2 :(得分:0)
SELECT `referer_id`,count(NVL(`referer_id`,0))
FROM `users`
GROUP BY `referer_id`