特定の期間に行われたすべてのカテゴリとトランザクションを選択しようとしています。そのために、私はこのクエリを持っています:
SELECT
b.category, SUM(a.value) as 'total'
FROM
transactions a,
transactions_category b
WHERE a.type = 2
AND YEAR(a.date) = :year
AND MONTH(a.date) = :month
AND a.id_category = b.id
GROUP BY a.id_category
ORDER BY total DESC
これは正常に機能していますが、トランザクションが関連付けられているカテゴリのみが選択されます。たとえば、「インターネット」という名前のカテゴリがあり、その月に「インターネット」に関連するトランザクションがなかった場合、そのリストには表示されません。
その月にトランザクションが存在しない場合でも、すべてのカテゴリのトランザクションの合計を選択するにはどうすればよいですか?
期待される結果は次のようになります。
category: 'Office', total: 240,00
category: 'Internet', total: 0,00
category: 'Food', total: 580,00
...
left
結合を使用して、すべてのフィルターをwhere
句から句に移動しon
ます
SELECT
c.category, SUM(t.value) as 'total'
FROM transactions_category c
LEFT JOIN transactions t
ON t.id_category = c.id
AND t.type = 2
AND YEAR(t.date) = :year
AND MONTH(t.date) = :month
GROUP BY c.category
ORDER BY total DESC
このようにして、カテゴリテーブルである左側のテーブルのすべての行を常に取得します
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加