我有两个表:team 和 team_member。 team_member 表显示哪个用户是哪个团队的成员。
+---------+------------+
| team_id | name |
+---------+------------+
| 1 | Marketing |
| 2 | New Launch |
| 3 | Sales |
+---------+------------+
+---------+---------+
| user_id | team_id |
+---------+---------+
| 21 | 2 |
| 4369 | 1 |
| 4369 | 2 |
| 4369 | 3 |
| 100 | 1 |
| 21 | 1 |
+---------+---------+
我需要一个查询来告诉我给定 user_id 所属的所有团队的 team_id 和团队名称,以及(这是困难的部分)每个团队中所有成员的计数。
对于上述数据,如果我们查看用户 21,我希望看到以下输出,因为用户 21 是团队 1 和团队 2 的成员,并且团队 1 有 3 名成员,团队 2 有 2 名成员。
+---------+------------+-------+
| team_id | name | count |
+---------+------------+-------+
| 1 | Marketing | 3 |
| 2 | New Launch | 2 |
+---------+------------+-------+
知道如何在 SQL 中做到这一点(最好是 MySQL,如果这有影响的话)?获取前两列没有问题(见底部),但我不知道如何添加计数。谢谢!
SELECT team.team_id, team.name
FROM team
LEFT JOIN team_member ON team.team_id = team_member.team_id
WHERE team_member.user_id = 21
最佳答案
您可以使用 team
加入 team_member
两次,然后聚合:
SELECT t.team_id, t.name, COUNT(mm.user_id) count
FROM team_member m
INNER JOIN team t ON t.team_id = m.team_id
INNER JOIN team_member mm ON mm.team_id = t.team_id
WHERE m.user_id = 21
GROUP BY t.team_id, t.name
请参阅demo .
结果:
| team_id | name | count |
| ------- | ---------- | ----- |
| 1 | Marketing | 3 |
| 2 | New Launch | 2 |
关于mysql - 需要帮助编写组合两个表的 SQL SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59494393/