SQL、集約関数(SUM)を利用する時に注意すること

CakePHPにて、アソシエーションを組んでいるテーブルのSUMを算出しようとしたところ、毎回二倍になって値が表示されているといった問題に遭遇しました。

https://stackoverflow.com/questions/20984639/sum-returns-double-value

ここが参考になりました。

LeftJoinでテーブルをもともとのテーブルAの横にJoinしようとした時に、BとCのテーブルを二つ追加しようとした時、 A has many B and Cという状況で、Aに対してCの値のレコードが2つ、Bのレコードが1つJoinした際に、ここで

SUM(B.value)

とすると、レコードがCによって2つに複製されてしまったために2倍の値が帰ってきてしまいます。 あらかじめsubqueryで集約したテーブルをJoinするのが解決策のようです。