MySQL 查询 - 将 3 个表连接在一起,按一列分组并计算其他 2 个表
以下是我正在使用的 3 个表的示例。
Teams +----+------+ | id | name | +----+------+ | 1 | abc | | 2 | def | | 3 | ghi | +----+------+
Members +----+-----------+----------+---------+ | id | firstname | lastname | team_id | +----+-----------+----------+---------+ | 1 | joe | smith | 1 | | 2 | jared | robinson | 1 | | 3 | sarah | cole | 3 | | 4 | jaci | meyers | 2 | +----+-----------+----------+---------+
Goals +----+-----------+ | id | member_id | +----+-----------+ | 1 | 3 | | 2 | 2 | | 3 | 2 | | 4 | 3 | | 5 | 1 | +----+-----------+
我正在尝试获取一个输出类似这样的查询...
Output +--------+----------------+-------------+ | t.name | Count(members) | Count(goals)| +--------+----------------+-------------+ | abc | 2 | 3 | | def | 1 | 2 | | ghi | 1 | 0 | +--------+----------------+-------------+
这是我最接近的结果,但是当我在子查询中使用group by时,我获取“子查询返回多于 1 行”。
select t.name, count(*),
(select count(*)
from teams t
inner join members m on m.team_id = t.id
group by t.id)
from teams t
inner join members m on m.team_id = t.id
inner join goals g on g.member_id = m.id
group by t.id
Here are examples of the 3 tables I'm working with.
Teams +----+------+ | id | name | +----+------+ | 1 | abc | | 2 | def | | 3 | ghi | +----+------+
Members +----+-----------+----------+---------+ | id | firstname | lastname | team_id | +----+-----------+----------+---------+ | 1 | joe | smith | 1 | | 2 | jared | robinson | 1 | | 3 | sarah | cole | 3 | | 4 | jaci | meyers | 2 | +----+-----------+----------+---------+
Goals +----+-----------+ | id | member_id | +----+-----------+ | 1 | 3 | | 2 | 2 | | 3 | 2 | | 4 | 3 | | 5 | 1 | +----+-----------+
And I'm trying to get a query that outputs something like this ...
Output +--------+----------------+-------------+ | t.name | Count(members) | Count(goals)| +--------+----------------+-------------+ | abc | 2 | 3 | | def | 1 | 2 | | ghi | 1 | 0 | +--------+----------------+-------------+
This is the closest I've come, but when I use the group by in the subquery I get "Subquery returns more than 1 row".
select t.name, count(*),
(select count(*)
from teams t
inner join members m on m.team_id = t.id
group by t.id)
from teams t
inner join members m on m.team_id = t.id
inner join goals g on g.member_id = m.id
group by t.id
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据我的理解,这是我提出的查询:
查询的细分:
#1。获取成员 ID 及其关联的目标计数 (innerQuery)
#2。获取目标总和 (inner_1)
#3 的团队 ID。获取每个团队的总成员数 (inner_2)
#4。右连接inner_1和inner_2(因为会有NULL)并使用IFNULL检查并替换0
Based on my understanding, here is the query that I come up with:
The breakdown of the query:
#1. Get the member ID with its associated goals count (innerQuery)
#2. Get the team id for with the total SUM of the goals (inner_1)
#3. Get total members count per team (inner_2)
#4. RIGHT JOIN inner_1 and inner_2 (since there will be NULL) and use IFNULL to check and replace that 0