簡體   English   中英

我怎樣才能得到項目的總數?

[英]How can I get a total count of items?

我試圖找出一個 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,但未顯示在團隊表中。

你能為我指出正確的方向嗎?

謝謝!

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

暫無
暫無

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

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