PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment écrire une requête SQL pour calculer la quantité de composants vendus avec leurs assemblages parents ? (Postgres 11/CTE récursif ?)

En gros tu as la solution. Si vous avez également stocké les quantités et les catégories dans votre CTE, vous pouvez simplement ajouter un WHERE filter et un SUM agrégation après :

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

Toute ma requête ressemble à ceci (qui ne diffère que des vôtres par les détails que j'ai mentionnés ci-dessus) :

démo :db<>violon

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

Remarque :je n'ai pas utilisé votre vue, car j'ai trouvé plus pratique de récupérer les données directement à partir des tables au lieu de joindre les données que j'ai déjà. Mais c'est comme ça que je l'aime personnellement :)