繁体   English   中英

如何从右侧表中加入每个组的行数

[英]How to join row count of each group from right side table

我有两个表 i)团队 ii)team_member。 team_member 表包含每个团队下的所有成员。

团队表看起来像这样:

+-----------------------+
|  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     |
+------------------+

任何人都可以请停止查询错误的地方以及正确的查询应该是什么。

谢谢你。

team.id而不是team_member.team_id数据进行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM