mysql - 需要帮助编写组合两个表的 SQL SELECT 语句

标签 mysql sql

我有两个表: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/

相关文章:

mysql - SQL 选择数据并按日期范围对数据进行分组

sql - Postgresql/SQL - 我的日期/时间戳逻辑似乎可靠但产生空值

python - celery 任务和 django 查询集缓存

php - 可变参数/结果与准备好的语句绑定(bind)

mysql - PHP 显示具有两个条件的分组依据

php代码插入mysql表

sql - digitalocean vps 上的 MYSQL 导入语法错误 1064

java - 降低服务器端报告占用过多内存风险的最佳方法

mysql - mysql 更新未提交

mysql - 如何同时从同一个表中选择从 SQL 表中删除行