PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich eine SQL-Abfrage schreiben, um die Menge der verkauften Komponenten mit ihren übergeordneten Baugruppen zu berechnen? (Postgres 11/rekursiver CTE?)

Im Grunde haben Sie die Lösung. Wenn Sie die Mengen und Kategorien auch in Ihrem CTE hinterlegt haben, können Sie einfach ein WHERE hinzufügen Filter und eine SUM Aggregation danach:

SELECT
    child_name,
    SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name

Meine gesamte Abfrage sieht so aus (die sich nur in den oben genannten Details von Ihrer unterscheidet):

demo:db<>fiddle

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

Hinweis:Ich habe Ihre Ansicht nicht verwendet, weil ich es praktischer fand, die Daten direkt aus den Tabellen abzurufen, anstatt bereits vorhandene Daten zusammenzuführen. Aber so mag ich es persönlich :)