现在有这样三张表 A表、B表、C表
其中B表、C表为A表的字表 即:A表的主键分别是B表、C表的外键
A 表
aID a1 a2
100 a数据 a数据
101 a数据 a数据
102 a数据 a数据
103 a数据 a数据
104 a数据 a数据 B表
bID aID b1 stat
b100 100 b数据 0
b101 101 b数据 1
b102 100 b数据 0
b103 101 b数据 1
b104 100 b数据 1C表
cID aID c1 stat
c100 100 c数据 1
c101 101 c数据 1
c102 100 c数据 0
c103 101 c数据 1
c104 100 c数据 1
c105 100 c数据 1 想要得到的数据
aID a1 a2 aID对应于B表的总记录数 aID对应于B表stat为0的记录 aID对应于B表的总记录数 aID对应于B表stat为0的记录
100 a数据 a数据 3 2 4 1
101 a数据 a数据 2 0 2 0
其中B表、C表为A表的字表 即:A表的主键分别是B表、C表的外键
A 表
aID a1 a2
100 a数据 a数据
101 a数据 a数据
102 a数据 a数据
103 a数据 a数据
104 a数据 a数据 B表
bID aID b1 stat
b100 100 b数据 0
b101 101 b数据 1
b102 100 b数据 0
b103 101 b数据 1
b104 100 b数据 1C表
cID aID c1 stat
c100 100 c数据 1
c101 101 c数据 1
c102 100 c数据 0
c103 101 c数据 1
c104 100 c数据 1
c105 100 c数据 1 想要得到的数据
aID a1 a2 aID对应于B表的总记录数 aID对应于B表stat为0的记录 aID对应于B表的总记录数 aID对应于B表stat为0的记录
100 a数据 a数据 3 2 4 1
101 a数据 a数据 2 0 2 0
from a
left join (select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from b group by aid) b on a.aid = b.aid
left join (select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from c group by aid) c on a.aid = c.aid
FROM a aa LEFT JOIN
(SELECT aId,COUNT(*) B记录,sum(case when stat=0 THEN 1 ELSE 0 END) [B除0]
FROM B
GROUP BY aId
)bb ON aa.aId=bb.bId
LEFT JOIN
(
SELECT aId,COUNT(*) C记录,sum(case when stat=0 THEN 1 ELSE 0 END) [C除0]
FROM C
GROUP BY aId
)cc ON aa.aId=cc.cId
a.*,b.s1,b.s2,c.s1,c.s2
from
a
left join
(select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from b group by aid) b
on
a.aid = b.aid
left join
(select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from c group by aid) c
on
a.aid = c.aid