PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как мога да напиша SQL заявка, за да изчисля количеството компоненти, продавани с техните родителски модули? (Postgres 11/рекурсивен CTE?)

По принцип имате решението. Ако сте съхранили количествата и категориите във вашия CTE, можете просто да добавите WHERE филтър и SUM агрегиране след това:

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

Цялата ми заявка изглежда така (която се различава от вашата само в подробностите, които споменах по-горе):

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

Забележка:Не използвах вашия изглед, защото намерих за по-удобно да извличам данните директно от таблиците, вместо да обединявам данни, които вече имам. Но това е начинът, по който лично аз го харесвам :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да получа psycopg2 регистриране на времето за изпълнение на заявка?

  2. елиминирайте дублиращи се стойности на масив в postgres

  3. 7 неща, за които трябва да внимавате при внедряването на PostgreSQL

  4. Изпълнявайте отложен тригер само веднъж на ред в PostgreSQL

  5. Вграден PostgreSQL за Java JUnit тестове