PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak napisać zapytanie SQL, aby obliczyć ilość sprzedanych komponentów z ich nadrzędnymi zespołami? (Postgres 11/rekurencyjne CTE?)

Zasadniczo masz rozwiązanie. Jeśli zapisałeś ilości i kategorie również w swoim CTE, możesz po prostu dodać WHERE filtr i SUM agregacja później:

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

Całe moje zapytanie wygląda tak (które różni się tylko szczegółami, o których wspomniałem powyżej, od twojego):

demo:db<>skrzypce

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

Uwaga:nie korzystałem z Twojego widoku, ponieważ bardziej przydatne było pobieranie danych bezpośrednio z tabel, zamiast łączenia danych, które już posiadam. Ale tak właśnie mi się osobiście podoba :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fabric i Sudo jako inny użytkownik

  2. Postgresql - tworzenie kopii zapasowej bazy danych i przywracanie na innego właściciela?

  3. Wymuś rozłączenie klienta za pomocą PostgreSQL

  4. Postgres - Obliczanie sum na podstawie wyniku sumy innej kolumny

  5. PostgreSQL:WYBIERZ GDZIE ma mniej niż 15 minut