Запрос суммирования значения строк до определенного максимального значения - PullRequest
1 голос
/ 05 июня 2019

У меня есть проблема, которая включает в себя 3 таблицы, подобные этой (я показываю только значимые поля):

Заказы таблицы:

id
date

В каждом заказе может быть больше строк:

Таблица OrderRows:

id
order_id
article_id
quantity
quantity_evaded
quantity_available

Теперь в таблице списка заказов я делаю запрос, подобный этому, чтобы суммировать все значения заказа

SELECT o.*,
   SUM(r.quantity) quantity, SUM(r.quantity_evaded) evaded,
   SUM(r.quantity_available) available
FROM `Orders` AS `o`
LEFT JOIN `OrderRows` as `r` ON `r`.`order_id`=`o`.`id`
GROUP BY `o`.`id` 

Теперь проблема в том, что этот запросничего не говорит мне о том, что заказ может быть закрыт или нет.Заказ можно закрыть, когда все статьи в нем имеют достаточную доступность для каждой строки.Давайте возьмем пример, где у меня есть заказ с двумя статьями, статьей A и статьей B, каждая из которых была заказана в количестве 5 и доступно 10 для A и 2 для B.

сумма доступности дает 12 (10 + 2), что превышает заказанное количество, что составляет 10, но у меня недостаточно товаров для товаров B (заказано только 2 на 5).Есть ли способ сделать сумму таким образом, чтобы она подсчитывалась до определенного максимального значения, или единственный способ, которым я располагаю, состоит в том, чтобы циклически обрабатывать все строки порядка и проверять, достаточно ли все единственные строки в наличии?

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Необходимо выполнить сравнение до , применяя функцию агрегирования:

SELECT o.*,
       SUM(r.quantity) as quantity,
       SUM(r.quantity_evaded) as evaded,
       SUM(r.quantity_available) as available,
       NOT MAX( r.quantity > r.quantity_available ) as is_closed
FROM `Orders` `o` LEFT JOIN
     `OrderRows` `r`
     ON `r`.`order_id` = `o`.`id`
GROUP BY o.id;

Выражение r.quantity > r.quantity_available возвращает 1, если ордер не может быть закрыт.MAX() определяет, соответствует ли любая статья этому критерию.

Примечание. Предполагается, что статьи не дублируются в заказе.

0 голосов
/ 05 июня 2019

Сделайте набор результатов совокупной суммы, затем отфильтруйте этот набор результатов, где сумма меньше доступного количества.Это даст вам заказы, которые вы можете выполнить с доступным количеством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...