Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL多重聚合_Mysql_Aggregate Functions - Fatal编程技术网

MySQL多重聚合

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.

如果没有第三个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.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。