返回小于给定值的字段求和的行

时间:2011-09-07 20:16:28

标签: mysql sql

我对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

提前致谢。

2 个答案:

答案 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