2013-10-05 51 views
1

我有一個表users這樣的:選擇組,計數零

id user refid 
1 a null 
2 b 1 
3 c 1 
4 d 2 
5 f 3 

我需要選擇用戶,通過ID和每個REFID爲每個用戶例如的計數數量的分組,

id user count 
1  a  2 
2  b  1 
3  c  1 
4  d  0 
5  4  0 

這是我曾嘗試:

SELECT u1 . id,u1 . user , count(u1.id) count FROM users u1 
LEFT JOIN users u2 ON u1.id = u2.refid GROUP BY u1.id 

返回

id user count 
1  a  2 
2  b  1 
3  c  1 

我該如何讓mysql返回那些id沒有被用作refid的人?

+0

當我運行查詢,我得到了最後2行,但計數1 – Barmar

+0

是的,這是不正確的 – Smith

+0

我知道這是不正確的,但我不知道爲什麼你說的查詢返回與我對它不同的東西不同。 – Barmar

回答

1

您可以使用SUM(IF(...,0,1))來只計算具有某個屬性的行。我認爲以下內容應該可以工作,但我不確定,爲什麼最後兩行在輸出中缺失。

SELECT u1.id, u1.user, SUM(IF(u2.id IS NULL,0,1)) count 
FROM users u1 
LEFT JOIN users u2 ON u1.id=u2.refid 
GROUP BY u1.id 
2

這工作:

SELECT u1 . id,u1 . user , count(u2.refid) count FROM users u1 
LEFT JOIN users u2 ON u1.id = u2.refid GROUP BY u1.id 

COUNT只能算作非空值,所以你需要u2指定列,因爲這將是NULL當沒有比賽。

FIDDLE