Mysql 选择行到总和
Posted
技术标签:
【中文标题】Mysql 选择行到总和【英文标题】:Mysql Select rows to the sum of 【发布时间】:2012-08-09 14:13:31 【问题描述】:我有一张包含以下信息的表格:
编号 |商品编号 | stock_package_id |金额 |价钱 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我的问题是我正在尝试创建一个查询(尽可能简单,因为此表将与其他几个表连接),这将允许我输入金额:
例如
我想先从最便宜的价格中选择 22 个 Item_Id 775。
所以我想要返回的是:
编号 |商品编号 | stock_package_id |金额 |价钱 4 | 775 | 5 | 10 | 0.10 0 | 775 | 1 | 12 | 0.22 - 这只是 12,因为我们只想要总共 22一个伪例子:
从 stock_table 中选择直到amount
的总和等于或大于输入数字 (22) 按价格排序
这可能与mysql有关吗?
【问题讨论】:
嗯..“有总和”允许您对总和设置条件..“按...升序排序”可以让您订购金额。 您能否将“我想要返回的内容”修改为您真正想要的内容?我看不到有 22 的 SUM(..) 列 @Martin 这就是重点。它应该只显示最多 22 行。 【参考方案1】:架构:
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
【讨论】:
【参考方案2】:您需要使用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;
【讨论】:
OP 想要 SUMamount
等于 22
这不会限制为 22 行而不是数量的总和 == 22?
这似乎更接近了。虽然我将在下一个额外阶段删除找到的“多余”库存,但它会起作用,但您的示例似乎只返回我实际需要的行。
只是在测试中应该是直到数量 == 22 而不是价格。尝试将 + 价格更改为 + 金额,但没有成功
对于 9 年后出现的任何人来说,这个答案中的第二个代码块确实做了正确的事情,它的总和为 22。第一个块做了这些以前的 cmets 所说的,它在哪里而是选择 22 行。以上是关于Mysql 选择行到总和的主要内容,如果未能解决你的问题,请参考以下文章