如何获得物品总数?

时间:2019-09-24 20:50:48

标签: mysql

我正在尝试找出一个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,但未显示在“团队”表中。

你能指出我正确的方向吗?

谢谢!

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