sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo escribir una consulta SQL para calcular la cantidad de componentes vendidos con sus ensamblajes principales? (¿Postgres 11/CTE recursivo?)

Básicamente tienes la solución. Si también almacenó las cantidades y categorías en su CTE, simplemente puede agregar un WHERE filtro y un SUM agregación después:

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

Toda mi consulta se ve así (que solo difiere de la suya en los detalles que mencioné anteriormente):

demostración: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:no utilicé su vista, porque me resultó más útil obtener los datos directamente de las tablas en lugar de unir los datos que ya tengo. Pero así es como a mí personalmente me gusta :)