Тройное соединение столов с вычитанием - PullRequest
0 голосов
/ 08 сентября 2018

У меня 3 таблицы (производство, продажа, потери)
Все 3 таблицы имеют столбцы: Продукт и количество
Мне нужен оператор запроса, который объединит все 3 таблицы следующим образом:

производство - продажи - потери

сгруппированы по продукту

Заранее спасибо за советы и рекомендации :)

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Вы можете сгруппировать каждую таблицу по отдельности, а затем [влево] присоединиться к ним:

SELECT p.product, p_quantity - COALESCE(s_quantity, 0) - COALESCE(w_quantity, 0)
FROM      (SELECT   product, SUM(quantity) AS p_quantity
           FROM     production
           GROUP BY product) p
LEFT JOIN (SELECT   product, SUM(quantity) AS s_quantity
           FROM     sales
           GROUP BY product) s ON p.product = s.product 
LEFT JOIN (SELECT   product, SUM(quantity) AS w_quantity
           FROM     wastage
           GROUP BY product) w ON p.product = w.product
0 голосов
/ 08 сентября 2018

Объедините таблицы, используя левое объединение, сгруппируйте по продуктам и получите общее количество, вычтя значения, предполагая, что в таблицах продаж или потерь не может быть записи для данного продукта, а затем посчитайте их как 0.

select p.product, sum(p.quantity - coalesce(s.quantity,0) - coalesce(w.quantity,0)) as qty
from production p
left join sales s on p.product = s.product
left join wastage w on p.product = w.product
group by p.product
...