2011-11-15 7 views
0

3回目のDcid = C.idの結合がないと、このクエリはCのカウントを返します.3回目の結合でカウントが破損し、不要なタプルがCの結合のカウントに入ります。では、Cカウントを有効にせずにCとDのカウントを取得するにはどうすればよいですか?正しい数を得るために使用できる括弧の形がありますか?MySQLの複数の集約

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 
+0

あなたの前に重複したc.aidを取得する予定がない限り、 'COUNT(DISTINCT C.aid)'があります。表Dに参加しました。 –

答えて

1

私は「あなたが本当に実際に持っているどのように多くのエントリがしたいですか、今...他のテーブル自身がたに事前に集計および参加しました...何かなどから

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"との相関関係を持つ全体的なカウント

関連する問題