簡體   English   中英

MySQL - 連接兩個表,分組和計數

[英]MySQL - join two tables, group and count

我有兩個表:

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)

我在這里做了一些假設(例如,連接中的 INNER JOIN 與 LEFT JOIN 以及計數中的 DISTINCT),但聽起來你只是想要

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

查詢如下:

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. 左外部連接與左側的 reviewStatusPhases 以顯示所有名稱。
  2. 按 reviewStatusPhases 的名稱分組。
  3. 顯示用戶 ID 的 reviewStatusPhases 名稱和計數(忽略空值)

使用LEFT JOIN如下:

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

您可以輕松地使用狀態列來跟蹤用戶及其活動。 在您的情況下, ReviewStatus

我希望以下內容會有所幫助

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
SELECT 
DISTINCT s.s_level AS 'Level', 
COUNT(DISTINCT s.s_id) AS Schools, 
COUNT(DISTINCT st.st_id) AS Teachers 
FROM schools AS s
JOIN school_teachers AS st ON st.st_school_idFk = s.s_id AND st.st_status = 1
WHERE s.s_status = 1 
GROUP BY s.s_level

暫無
暫無

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

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