PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso scrivere una query SQL per calcolare la quantità di componenti venduti con i relativi assiemi principali? (Postgres 11/CTE ricorsivo?)

Fondamentalmente hai la soluzione. Se hai memorizzato anche le quantità e le categorie nel tuo CTE, puoi semplicemente aggiungere un WHERE filtro e un SUM aggregazione successiva:

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

La mia intera domanda è simile a questa (che differisce solo nei dettagli che ho menzionato sopra dalla tua):

demo:db<>violino

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

Nota:non ho utilizzato la tua vista, perché ho trovato più comodo recuperare i dati direttamente dalle tabelle invece di unire i dati che già possiedo. Ma questo è proprio il modo in cui personalmente mi piace :)