基本的にあなたは解決策を持っています。数量とカテゴリもCTEに保存した場合は、WHERE
を追加するだけです。 フィルタとSUM
その後の集計:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
私のクエリ全体は次のようになります(上記の詳細のみがあなたのクエリと異なります):
WITH RECURSIVE cte AS (
SELECT
s.sold_name,
s.sold_quantity,
r.child_name,
r.child_quantity,
nc.thing_category as category
FROM
sales s
JOIN relator r
ON s.sold_name = r.parent_name
JOIN names_categories nc
ON r.child_name = nc.thing_name
UNION ALL
SELECT
cte.sold_name,
cte.sold_quantity,
r.child_name,
r.child_quantity,
nc.thing_category
FROM cte
JOIN relator r ON cte.child_name = r.parent_name
JOIN names_categories nc
ON r.child_name = nc.thing_name
)
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
注:既に持っているデータを結合するよりも、テーブルから直接データをフェッチする方が便利であることがわかったため、ビューは使用しませんでした。しかし、それは私が個人的に好きな方法です:)