条件付きの Cases または Ifs を使用してこれを行う方法があるように感じますが、それを理解することはできません。
以下のクエリは 3 つのテーブルを結合し、3 つのテーブルすべてが行を返す場合にうまく機能します。ただし、campaign_groups と new_advertisers にはレコードが存在し、payment_transactions には存在しない場合があります。
payment_transactions.transaction_date >= Campaign_groups.date_created であることを確認する WHERE 句のため、トランザクションがゼロの行は除外されます。
LEFT JOIN が行を返す場合にのみ WHERE 句を適用する方法はありますか?
SELECT sum(payment_transactions.transaction_amount) as payment,
new_advertisers.account_id,
new_advertisers.advertiser_id,
max(payment_transactions.transaction_date) as last_payment,
campaign_groups.id,
campaign_groups.date_created,
TIMESTAMPDIFF(DAY, max(payment_transactions.transaction_date), NOW()) as days_passed
FROM campaign_groups
INNER JOIN new_advertisers ON campaign_groups.advertiser_id = new_advertisers.advertiser_id
LEFT JOIN payment_transactions ON payment_transactions.account_id = new_advertisers.account_id
WHERE payment_transactions.transaction_date >= campaign_groups.date_created
AND campaign_groups.weekly_budget_cents > 0
ORDER BY days_passed DESC