MySQL多重聚合
如果没有第三个join D.cid=C.id,此查询将给出C的计数。使用第三个join,它会破坏计数,并将不需要的元组放入C的join计数中。那么如何在不影响C计数的情况下得到C和D的计数呢?是否有一种形式的括号可以用来确保我得到正确的计数MySQL多重聚合,mysql,aggregate-functions,Mysql,Aggregate Functions,如果没有第三个join D.cid=C.id,此查询将给出C的计数。使用第三个join,它会破坏计数,并将不需要的元组放入C的join计数中。那么如何在不影响C计数的情况下得到C和D的计数呢?是否有一种形式的括号可以用来确保我得到正确的计数 SELECT A.*, B.*, COUNT(C.aid) AS cCount FROM tableA A LEFT JOIN tableC AS C ON A.id = C.aid INNER JOIN tableB AS B ON A.id = B.
SELECT A.*, B.*, COUNT(C.aid) AS cCount
FROM tableA A
LEFT JOIN tableC AS C ON A.id = C.aid
INNER JOIN tableB AS B ON A.id = B.aid
LEFT JOIN tableD AS D ON D.cid = C.id
GROUP BY A.id
我会让其他表中的计数预先聚合到它们自己,并加入。。。类似于
SELECT
A.*,
B.*,
COALESCE( PreAggC.CCount, 0 ) as CCount,
COALESCE( PreAggC.WithDCount, 0 ) as WithDCount
FROM
tableA A
JOIN tableB B
on A.ID = B.aID
LEFT JOIN ( select aID,
count( distinct id ) CCount,
count(*) as WithDCount
from tableC
left join tableD D
on c.ID = D.cID
group by aID ) PreAggC
on A.id = PreAggC.aID
现在,你真的想知道有多少条记录实际上是“D”记录吗?所以我把这两项都包括进去了。。。不同的“C”条目,以及与“D”相关的总计数有计数(不同的C.aid)
,除非您在加入表D之前已经期望得到重复的C.aid。