如何从右侧表连接每个组的行数

时间:2016-03-26 06:30:48

标签: mysql join

我有两张桌子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     |
+------------------+

任何人都可以停止查询错误的位置以及正确的查询内容。

谢谢。

1 个答案:

答案 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