INNER JOINの結果が同じであっても、ON条件とWHERE条件を分割する方がよい場合があります。2つのテーブルをリンクするものが明確になります。
SELECT sum(cal2.somecolumn)
FROM consumer_action_log as cal1
JOIN consumer_action_log as cal2
ON cal1.COMMUNICATIONS_ID=cal2.COMMUNICATIONS_ID
WHERE cal1.COMM_TYPE_ID=4
- cal1レコードを検索する
COMM_TYPE_ID=4
- COMMUNICATIONS_IDがcal1と等しいcal2に参加(自己参加)
- cal2からいくつかの列を合計します
フィルタのCOMMS_TYPE_ID=4
結果が複数cal1.COMMUNICATIONS_ID
の場合は、COMMUNICATIONS_IDが必要になりますGROUP BY
(cal1またはcal2からは関係ありません-これらは同じです)
SELECT cal2.COMMUNICATIONS_ID, sum(cal2.somecolumn)
FROM consumer_action_log as cal1
JOIN consumer_action_log as cal2
ON cal1.COMMUNICATIONS_ID=cal2.COMMUNICATIONS_ID
WHERE cal1.COMM_TYPE_ID=4
GROUP BY cal2.COMMUNICATIONS_ID