Mysql 选择行的总和


Mysql Select rows to the sum of

我有一个包含以下信息的表格:

身份证 |     商品编号 |stock_package_id |金额 |价格0 |       775 |        1 |  16 | 0.221 |       758 |        2 |  10 | 0.282 |       775 |        3 |  10 | 0.303 |       774 |        4 |  10 | 0.254 |       775 |        5 |  10 | 0.105 |       775 |        6 |  10 | 0.55

我的问题是我正在尝试创建一个查询(尽可能简单,因为此表将与其他几个表连接),这将允许我输入金额:

例如

我希望Item_Id 775 个中的 22 个首先从最便宜的价格中进行选择。

所以我想要返回的是:

身份证 |     商品编号 |stock_package_id |金额 |价格4 |       775 |        5 |  10 | 0.100 |       775 |        1 |  12 | 0.22 - 这只是 12,因为我们总共只想要 22 个

佩苏多的例子:

从stock_table中选择,直到amount之和等于或大于输入数 (22) 按价格排序

这可能与MySql有关吗?

您需要

使用ORDER BY子句根据price列对记录进行排序:

SELECT *
FROM table_name
WHERE Item_ID = 775
ORDER BY price ASC
LIMIT 22;

如果要获取记录直到sum(price)变为value (22),请尝试以下操作:

SELECT *
FROM table_name, (SELECT @var_price := 0) a
WHERE Item_ID = 775 AND
      (@var_price := @var_price + price) <= 22
ORDER BY price ASC;

架构:

 CREATE TABLE table1
(`id` int, `Item_ID` int, `stock_package_id` int, `amount` int, `price` float);
 INSERT INTO table1
(`id`, `Item_ID`, `stock_package_id`, `amount`, `price`)
 VALUES
(0, 775, 1, 16, 0.22),
(1, 758, 2, 10, 0.28),
(2, 775, 3, 10, 0.30),
(3, 774, 4, 10, 0.25),
(4, 775, 5, 10, 0.10),
(5, 775, 6, 10, 0.55);

设置金额获得:

SET @var_amount = 22;

选择金额:

SELECT * FROM (
SELECT table1.*, if ((@var_amount := @var_amount - amount) > 0, amount, amount +  @var_amount) as buy_amount
FROM table1
WHERE Item_ID = 775
ORDER BY price ASC
) AS tmp 
WHERE buy_amount > 0

结果:

id  Item_ID stock_package_id    amount  price   buy_amount
4   775 5                       10      0.1     10
0   775 1                       16      0.22    12