2013-10-02 32 views
1

我有一個表users這樣的:選擇組由相同的表

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

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

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

這是我曾嘗試:

SELECT user, refid, count(*) cnt FROM `users` group by refid 

然而,這讓我對每個值錯誤的用戶。我如何才能爲每個值獲取正確的用戶?

+0

我不明白你的預期輸出。用戶「a」與refid「1」有關,用戶「b」與refid「2」有什麼關係?在表中,用戶「a」的refid爲「null」,而用戶「b」的refid爲「1」。你爲什麼期望它們與你在預期結果中展示的方式相匹配?你能解釋一下你究竟想達到什麼嗎? –

+0

@MikeBrant我同意你的意見。但是,我認爲OP在示例輸出中意味着'id'而不是'refid'。那麼這將是有道理的,因爲OP將尋找每個用戶的推薦量(對於那些至少有一個)。 –

+0

@MostyMostacho是正確的關於ID,我做了編輯 – Smith

回答

1

我想這是你在找什麼。基本上,你錯過了一個加入。

select u1.id, u1.user, count(u1.id) cnt from mlm_users u1 
join mlm_users u2 on u1.id = u2.refid 
group by u1.id, u1.user 

這將返回ID,用戶和他們每個人都有推薦量(僅適用於至少有一個推薦的那些)。

+0

感謝您的幫助 – Smith

+0

如果我想要返回那些有推介和那些沒有0,我試過這個'SELECT u1。 *,count(u1.id)cnt FROM mlm_users u1 LEFT JOIN mlm_users u2 ON u1.id = u2.refid GROUP BY u1.id'這是返回那些有零爲1 – Smith

1

您需要組由用戶和REFID

SELECT user, refid, count(*) cnt FROM `mlm_users` group by user,redid