sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan kan jeg skrive en SQL-forespørgsel for at beregne mængden af ​​komponenter, der sælges med deres overordnede samlinger? (Postgres 11/rekursiv CTE?)

I bund og grund har du løsningen. Hvis du også har gemt mængderne og kategorierne i din CTE, kan du blot tilføje en WHERE filter og en SUM aggregering bagefter:

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

Hele min forespørgsel ser sådan ud (som kun adskiller sig i de detaljer, jeg nævnte ovenfor, fra din):

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

Bemærk:Jeg brugte ikke din visning, fordi jeg fandt det mere praktisk at hente dataene fra direkte fra tabellerne i stedet for at samle data, jeg allerede har. Men det er bare sådan jeg personligt kan lide det :)



  1. Hvordan opsætter jeg ASP.NET MVC 2 med MySQL?

  2. MySQL GRUPPER EFTER aldersgruppe inklusive null-intervaller

  3. Oracle SQL Connect By Logic

  4. Hvordan får man ét sæt data fra en SQL-forespørgsel fra flere tabeller?