PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como posso escrever uma consulta SQL para calcular a quantidade de componentes vendidos com seus assemblies pai? (Postgres 11/CTE recursiva?)


Basicamente você tem a solução. Se você também armazenou as quantidades e categorias em seu CTE, basta adicionar um WHERE filtro e um SUM agregação depois:
SELECT
    child_name,
    SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name

Minha consulta inteira se parece com isso (que difere apenas nos detalhes que mencionei acima da sua):

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

Nota:não usei sua view, pois achei mais prático buscar os dados diretamente das tabelas ao invés de juntar os dados que já tenho. Mas é assim que eu pessoalmente gosto :)