sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik een SQL-query schrijven om het aantal verkochte componenten met hun bovenliggende assemblages te berekenen? (Postgres 11/recursieve CTE?)

In principe heb je de oplossing. Als u de hoeveelheden en categorieën ook in uw CTE heeft opgeslagen, kunt u eenvoudig een WHERE . toevoegen filter en een SUM aggregatie achteraf:

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

Mijn hele vraag ziet er als volgt uit (die alleen verschilt in de details die ik hierboven heb genoemd van de jouwe):

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

Opmerking:ik heb uw weergave niet gebruikt, omdat ik het handiger vond om de gegevens rechtstreeks uit de tabellen op te halen in plaats van gegevens die ik al heb samen te voegen. Maar dat is precies hoe ik het persoonlijk leuk vind :)



  1. Hoe kan ik een index maken op de substring van een kolom?

  2. Postgres vindt alle rijen in databasetabellen die overeenkomen met criteria in een bepaalde kolom

  3. Hoe configureer ik Rails voor wachtwoordloze toegang tot een externe database?

  4. Cascadekopie van rijen in sql