私は2つのテーブルを持っています:
親子「カテゴリ」:
id name parent_id
1 Food NULL
2 Pizza 1
3 Pasta 2
「取引」:
id amount category_id
1 100 1
2 50 2
3 25 2
すべてのカテゴリと 2 つの合計列を返したい:
total = この category_id を持つすべてのトランザクションの合計金額
parentTotal = 合計 + そのすべての子カテゴリの合計
例 (上記の表を使用):
id name parent_id total parentTotal
1 Food NULL 100 175
2 Pizza 1 0 0
3 Pasta 2 75 0
編集:
コードが更新され (以下の Nedret Recep のコードに基づく)、正常に動作します...
SELECT
tmp1.id, tmp1.name, tmp1.parent_id, tmp1.total, IFNULL(tmp1.total, 0) + IFNULL(tmp2.s, 0) AS parenttotal
FROM
(SELECT
ca.id, ca.name, ca.parent_id, SUM(tr.amount) as total
FROM
categories ca
LEFT JOIN
transactions tr
ON
tr.category_id = ca.id
GROUP BY
ca.id)
AS tmp1
LEFT JOIN
(SELECT
c.id, c.parent_id as categoryid, SUM(t.amount) AS s
FROM
transactions t
RIGHT JOIN
categories c
ON
t.category_id = c.id
GROUP BY
c.parent_id)
AS tmp2
ON tmp2.categoryid = tmp1.id
order by coalesce(tmp1.parent_id, tmp1.id), tmp1.parent_id
助けていただければ幸いです - ありがとう!