2017-08-29 65 views
0

我有兩個表:MySQL的 - 連接兩個表,組和計數

reviewStatusPhases - id|name 

userPhase - id|reviewStatusPhase_id|user_id|created_at|updated_at 

reviewStatusPhases表都記錄插入(有效,無效,在暫停,終止。 ..)和userPhase爲空。

這些表通過

userPhase.reviewStatusPhase_id = reviewStatusPhases.id 

一個連接到一個。

是否有可能在一個查詢中獲得所有reviewStatusPhases,並發現每個階段有多少用戶?在這種情況下,我會得到這樣的事情:

Active (0 Users) 
Inactive (0 Users) 
On Pause (0 Users) 
Terminated (0 Users) 
+0

當然 - LEFT JOIN reviewStatusPhases與userPhase(這樣你仍然得到了,對於不存在用戶條目但這些階段的記錄),GROUP BY相位ID和COUNT ... – CBroe

回答

2

我正在做一些假設在這裏(如INNER JOIN與留在加盟加盟,並在數不同),但它聽起來像是你只是想

SELECT reviewStatusPhases.name, COUNT(DISTINCT userPhase.user_id) 
FROM userPhase INNER JOIN reviewStatusPhases 
    ON userPhase.reviewStatusPhase_id = reviewStatusPhases.id 
GROUP BY reviewStatusPhases.name 
1

使用LEFT JOIN如下:

SELECT COUNT(m.UserId) FROM Table1 m 
LEFT JOIN Table2 k ON k.StatusId = m.StatusId 
WHERE k.Status = 'Inactive' 

您可以輕鬆地使用狀態列跟蹤用戶和他們的交流tivities。在你的情況下,ReviewStatus

+0

對於多次狀態,您可以使用'k.Status IN('active','inactive')'。雖然第二個答案用'GROUP BY'更合適。 –

1

我希望下面將是有益的

SELECT RPS.Name, COUNT(UP.user_id) 
FROM reviewStatusPhases RPS 
LEFT OUTER JOIN userphases UP ON RPS.id = UP.reviewStatusPhase_id 
GROUP BY RPS.Name 
ORDER BY RPS.Name 
2

查詢將如下:與左面,顯示所有名稱reviewStatusPhases

SELECT r.name as `name`, count(u.id) as `count` FROM reviewStatusPhases r LEFT OUTER JOIN userPhase u ON r.id = u.reviewStatusPhase_id GROUP BY r.name 
  1. 左外連接。
  2. 按reviewStatusPhases的名稱分組。
  3. 顯示reviewStatusPhases名和用戶ID(忽視空值)的數