Mysql как выбрать сумму из трех таблиц?

Таблицы по заказам

Таблица order_items
id, price, quantity

Таблица waybills_items
order_item_id, quantity

Таблица acts_items
order_item_id, quantity

waybills_items и acts_items - Это отгруженные позиции из заказа

Нужно посчитать сумму позиций указанных в таблице waybills_items или acts_items по всем заказам

У заказа могут быть записи в обеих таблицах waybills_items и acts_items

Можно как то сделать это одним запросом?

Сделал для waybills_items
но нужно учитывать что кол-во может быть указано в обеих таблицах или в какой-то одной из них
То есть например создана накаладная waybills на 1шт из 2х в заказе
и так же акт на 1 из двух
в подсчете нужно учесть только эту одну позицию с учетом что она указана и там и там

SELECT
                SUM(oi.price * wi.quantity) as payments
            FROM waybills_items wi
            INNER JOIN order_items oi
              ON oi.id = wi.order_item_id
            INNER JOIN waybills w
              ON w.id = wi.order_waybill_id
            INNER JOIN order o 
              ON oi.order_id = o.id
            WHERE o.price_type = 1
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Я демаю Вам подойдет такой вариант:
select 
	oi.id,
	(oi.price * coalesce(wi.quantity, 0)) wi_sum,
	(oi.price * coalesce(ai.quantity, 0)) ai_sum,
	(oi.price * coalesce(least(wi.quantity, ai.quantity), 0)) both_sum
from order_items oi
left join waybills_items wi on wi.order_item_id = oi.id
left join acts_items ai on ai.order_item_id = oi.id
order by oi.id;


Здесь вычисляются суммы для каждой из таблиц по отдкльности и сумма по меньшему количеству из двух.

Вы можете эксперементировать с SQL запросом здесь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы