簡體   English   中英

MySQL選擇返回錯誤的NULL值與COUNT

[英]MySQL Select return wrong NULL value with COUNT

假設我有一個users表,其中有兩列,即idreferer_id

在此處輸入圖片說明

如果該用戶被其他人推薦,則他的推薦人將位於referer_id 如果他自己簽名,則referer_id將為NULL

我想計算一個用戶有多少個推薦用戶。

我有這樣的查詢

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

在此處輸入圖片說明

如您所見,NULL計數為0,但是我有很多用戶沒有被任何人引用。 我該如何解決?

我不喜歡這樣,我認為那里有一個更優雅的解決方案,但是它可以工作,並且可以幫助您找到更好的解決方案。

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;

即使我無法解釋導致此問題的原因,我還是通過另一種解決方案來解決,例如:

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`

看看這個鏈接如何在MySQL中計算NULL值?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM