mysql按间隔3分组_MySQL查询 - 将3个表连接在一起,按一列分组并计算其他2个表...

根据我的理解,这是我提出的查询:

SELECT name, membersCount, IFNULL(totalCount, 0) goalsCount FROM

(

SELECT m.team_id, SUM(innerQuery.goalsCount) totalCount

FROM (

SELECT m.id memberId, COUNT(*) goalsCount

FROM Members m

JOIN Goals g

ON m.id = g.member_id

GROUP BY member_id

) innerQuery

JOIN Members m

ON innerQuery.memberId = m.id

GROUP BY m.team_id

) inner_1

RIGHT JOIN

(

SELECT t.id, t.name, COUNT(*) membersCount

FROM Teams t

JOIN Members m

ON t.id = m.team_id

GROUP BY team_id

) inner_2

ON inner_1.team_id = inner_2.id查询细分:

#1。获取具有关联目标的成员ID(innerQuery)

SELECT m.id memberId, COUNT(*) goalsCount

FROM Members m

JOIN Goals g

ON m.id = g.member_id

GROUP BY member_id#2。获取团队ID以及目标的总和(inner_1)

SELECT m.team_id, SUM(innerQuery.goalsCount) totalCount

FROM (

.... Sub-query in step 1

) innerQuery

JOIN Members m

ON innerQuery.memberId = m.id

GROUP BY m.team_id#3。获得每个团队的成员总数(inner_2)

SELECT t.id, t.name, COUNT(*) membersCount

FROM Teams t

JOIN Members m

ON t.id = m.team_id

GROUP BY team_id#4。 RIGHT JOIN inner_1和inner_2(因为会有NULL)并使用IFNULL检查并替换0

SELECT name, membersCount, IFNULL(totalCount, 0) goalsCount FROM

(

.... Sub-query in step 2

) inner_1

RIGHT JOIN

(

.... Sub-query in step 3

) inner_2

ON inner_1.team_id = inner_2.id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值