我正在尝试找出一个MYSQL字符串,但是我的笨拙困扰着我。我正在尝试计算每个阶段的团队总数。
要考虑的表:
phases
+----+------------+
| id | phase_name |
+----+------------+
| 1 | start |
| 2 | middle |
| 3 | end |
| 4 | finish |
+----+------------+
teams
+----+-----------+----------+
| id | team_name | phase_id |
+----+-----------+----------+
| 1 | team1 | 2 |
| 2 | team2 | 3 |
| 3 | team3 | 3 |
| 4 | team4 | 4 |
| 4 | team5 | 3 |
+----+-----------+----------+
Desired result
+----------+------------+-----------+
| phase_id | phase_name | tot_teams |
+----------+------------+-----------+
| 1 | start | NULL |
| 2 | middle | 1 |
| 3 | end | 3 |
| 4 | finish | 1 |
+----------+------------+-----------+
我尝试过:
SELECT
T.phase_id, P.phase_name, COUNT(*) AS tot_teams
FROM
teams T
LEFT JOIN
phases P ON P.id = T.phase_id
GROUP BY
phase_id;
但这仅显示受影响的phase_id。。。我希望在表中获取所有phase_id。我也尝试过:
SELECT
P.phase_name, T.phase_id, COUNT(*)
FROM
teams T
RIGHT JOIN
phases P on P.`id` = T.`phase_id`
GROUP BY
P.id
但是显示无效数据。 (例如,phase_id的数量为1,但未显示在“团队”表中。
你能指出我正确的方向吗?
谢谢!
答案 0 :(得分:1)
RIGHT JOIN
是正确的,但是您需要使用COUNT(T.phase_id)
而不是COUNT(*)
。否则,您要计算没有团队的阶段为该阶段生成的包含NULL
的行。
大多数人更喜欢使用LEFT JOIN
,将主表放在首位。
SELECT P.phase_name, P.phase_name, COUNT(T.phase_id)
FROM phase AS P
LEFT JOIN teams AS T ON P.id = T.phase_id
GROUP BY P.id