gpt4 book ai didi

mysql - 获取尽可能多的行,直到在 MySQL 中达到给定的最小数量

转载 作者:行者123 更新时间:2023-11-29 07:00:05 25 4
gpt4 key购买 nike

例如我们有以下查询:

SELECT
item_id,
order_id,
product_id,
qty
FROM
orders
WHERE
product_id = 18253
ORDER BY
item_id ASC;

...这就是结果:

+---------+----------+------------+------+
| item_id | order_id | product_id | qty |
+---------+----------+------------+------+
| 15329 | 7369 | 18253 | 3 |
| 15330 | 7370 | 18253 | 1 |
| 15331 | 7371 | 18253 | 7 |
| 15332 | 7372 | 18253 | 1 |
| 15333 | 7373 | 18253 | 1 |
| 15334 | 7377 | 18253 | 1 |
| 15336 | 7379 | 18253 | 2 |
| 15337 | 7380 | 18253 | 1 |
| 15340 | 7383 | 18253 | 1 |
| 15341 | 7384 | 18253 | 1 |
+---------+----------+------------+------+
10 rows in set (0,04 sec)

现在我想获取所有可能的行(尽可能多),直到 qty 的总和至少为 5。最少数量应该是五个。按升序排序 (item_id)。

+---------+----------+------------+------+
| item_id | order_id | product_id | qty |
+---------+----------+------------+------+
| 15329 | 7369 | 18253 | 3 | // 3
| 15330 | 7370 | 18253 | 1 | // 4
| 15331 | 7371 | 18253 | 7 | // 11
+---------+----------+------------+------+

所以上面的 qty 的总和是 3, 4, 11。第三行使总和等于 5 或​​以上,这就是我所需要的。

另一个例子,当我的库存数量为 13 时:

+---------+----------+------------+------+
| item_id | order_id | product_id | qty |
+---------+----------+------------+------+
| 15329 | 7369 | 18253 | 3 | // 3
| 15330 | 7370 | 18253 | 1 | // 4
| 15331 | 7371 | 18253 | 7 | // 11
| 15332 | 7372 | 18253 | 1 | // 12
| 15333 | 7373 | 18253 | 1 | // 13
+---------+----------+------------+------+

我怎样才能做到这一点,有可能吗?

谢谢:)

最佳答案

可以按照item_id递增的顺序生成数量累计和,然后根据需要过滤掉结果:

select *
from (
select item_id,
order_id,
product_id,
qty,
@cum_qty := @cum_qty + qty as cum_qty
from orders, (select @cum_qty := 0) t
where product_id = 18253
order by item_id
) t
where cum_qty - qty < 5; -- or 13 or whatever

Demo

关于mysql - 获取尽可能多的行,直到在 MySQL 中达到给定的最小数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43788344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com