sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu napsat dotaz SQL pro výpočet množství komponent prodaných s jejich nadřazenými sestavami? (Postgres 11/rekurzivní CTE?)

V podstatě máte řešení. Pokud jste množství a kategorie uložili také do CTE, můžete jednoduše přidat WHERE filtr a SUM agregace poté:

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

Celý můj dotaz vypadá takto (který se od vašeho liší pouze v detailech, které jsem uvedl výše):

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

Poznámka:Nepoužil jsem váš pohled, protože mi přišlo užitečnější načítat data přímo z tabulek namísto spojování dat, která již mám. Ale mě osobně se to prostě líbí :)



  1. Jak vložit objekt (více než 10 vlastností) do mysql přes mybatis na základě anotace bez seznamu všech vlastností

  2. Dotaz MySQL ORDER BY určité hodnoty před ostatními

  3. Normální ukládání obrázků nebo mySQL blob?

  4. Jak funguje funkce CHAR() na serveru SQL Server (T-SQL)