我有两张桌子i)队伍ii)team_member。 team_member表保存每个团队下的所有成员。
Team Table看起来像这样:
+-----------------------+ | team | |-----------------------| | id | name | status | |-----------------------| | 1 | Team 1 | Active | |-----------------------| | 2 | Team 2 | Active | |-----------------------| | 3 | Team 3 | Active | |-----------------------| | 4 | Team 4 |Inactive| |-----------------------| | 5 | Team 5 | Active | +-----------------------+
团队成员表如下所示:
+--------------------------------------+ | team_member | |--------------------------------------| |tm_id| team_id | user_id | status | |--------------------------------------| | 1 | 1 | 2 | Inactive | |--------------------------------------| | 2 | 1 | 2 | Active | |--------------------------------------| | 3 | 1 | 3 | Active | |--------------------------------------| | 4 | 2 | 4 | Active | |--------------------------------------| | 5 | 2 | 5 | Inactive | +--------------------------------------+
我期待的结果是:
+------------------+ | expected result | |------------------| | id | count | |------------------| | 1 | 2 | |------------------| | 2 | 1 | |------------------| | 3 | 0 | |------------------| | 5 | 0 | +------------------+
它基本上是团队中每个团队下所有活跃成员的编号。
我的SQL查询是:
SELECT team.id, COUNT( team_member.tm_id )
FROM `team`
LEFT JOIN team_member ON team_member.team_id = team.id
AND team_member.status = 'Active'
GROUP BY team_member.team_id
现在出现的问题是SQL查询部分工作。如果每个团队至少有一个成员,那么查询工作正常。如果它找到一个没有成员的组,那么它会在结果中添加,但在此之后停止。
因此,如果team_member表为空,我得到的结果是:
+------------------+ | expected result | |------------------| | id | count | |------------------| | 1 | 0 | +------------------+
任何人都可以停止查询错误的位置以及正确的查询内容。
谢谢。
答案 0 :(得分:1)
按team.id
而不是team_member.team_id
对数据进行分组,因为team_member
表不包含所有团队ID。
试试这个:
SELECT team.id, COUNT( team_member.tm_id )
FROM `team`
LEFT JOIN team_member ON team_member.team_id = team.id
AND team_member.status = 'Active'
GROUP BY team.id;
SQL小提琴示例:http://sqlfiddle.com/#!9/65a397/2