sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag skriva en SQL-fråga för att beräkna antalet komponenter som säljs med sina moderenheter? (Postgres 11/rekursiv CTE?)

I grund och botten har du lösningen. Om du också lagrade kvantiteterna och kategorierna i din CTE kan du helt enkelt lägga till en WHERE filter och en SUM aggregering efteråt:

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

Hela min fråga ser ut så här (som bara skiljer sig i detaljerna jag nämnde ovan från din):

demo:db<>fiol

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

Obs:Jag använde inte din vy, eftersom jag tyckte att det var mer praktiskt att hämta data direkt från tabellerna istället för att sammanfoga data som jag redan har. Men det är precis så jag personligen gillar det :)



  1. MySQL:välja rader där en kolumn är null

  2. docker-compose :Servern begärde autentiseringsmetod okänd för klienten

  3. Få exakt resultat för nummerdelning

  4. Hur uppdaterar jag en tabell för att lägga till en primärnyckel och uppdatera alla befintliga rader med inkrementerade ID:n?