我对MySQL的了解是基本的。我想构建一个查询,以按升序返回所有对给定值求和的行。我无法弄明白我该怎么做。使用sum()只返回一行。我尝试了一个子查询,但它返回所有行。我不希望任何人做我的工作,我只是想让你帮我解决这个问题。 有人有想法吗?
如何检索其提交的“值”总和为30的所有行 例如:
given value: 30
field to sum: value
table:
id name value order
1 name1 3 1
2 name2 10 6
3 name3 13 3
4 name4 5 8
5 name5 20 25
因此,查询必须返回: id 1,id 3,id 2,id 4
提前致谢。
答案 0 :(得分:3)
set @total:=0;
select id, name, value, `order`
from
(select
id, name, value, `order`,
@total:=if(@total is null, 0, @total)+`order` as total
from THE_TABLE
order by `order`
) as derived
where total<=30;
答案 1 :(得分:0)
使用postgres作为数据库,我认为这样做你想要的。我不确定它在mysql中是否有效:
CREATE TABLE test (
id int,
name varchar(50),
value int,
order_ int
);
INSERT INTO test values (1, 'name1', 3, 1);
INSERT INTO test values (3, 'name3', 13, 3);
INSERT INTO test values (2, 'name2', 10, 6);
INSERT INTO test values (4, 'name4', 5, 8);
INSERT INTO test values (5, 'name5', 20, 25);
SELECT * FROM (SELECT *, SUM(value) OVER (ORDER BY order_) sumvalues FROM TEST) a WHERE sumvalues <30