SQL:如何选择总计达到某个值的行

时间:2016-07-29 16:10:48

标签: php mysql sql sum

我想选择总和达到某个值的行。

我的SQL(SQL Fiddle):

id  user_id     storage
1   1           1983349
2   1           42552
3   1           367225
4   1           1357899
37  1           9314493

它应该计算最多410000的总和并获得行。同时它应该得到这样的东西:

id  user_id     storage
2   1           42552
3   1           367225

如您所见,42552 + 367225 = 409777.它选择了两行近410000。

我已经尝试了所有东西,但它不起作用:(

对不起我的语言,我是德国人。

2 个答案:

答案 0 :(得分:1)

这就是你需要的:

SET @suma = 0;
SELECT @suma:=@suma+`storage`, id, storage FROM table 
WHERE @suma<=410000 
ORDER BY storage ASC;

我添加了“ORDER BY storage ASC”来跳过需要大量存储的行。

答案 1 :(得分:1)

您可以使用相关子查询来获取运行总计,并检索运行总计为&lt;指定的号码。 (请注意,我将存储列更改为int。如果是varchar,则比较将返回错误的结果)

select id,user_id,storage
from uploads t
where storage+coalesce((select sum(storage) from uploads 
                        where storage<t.storage),0) < 410000
order by storage

SQL Fiddle

编辑:当存储列中存在重复值时,必须通过包含id列的条件来计算运行总和中的值。 (在这种情况下使用<条件,因此拾取重复存储值的最小id)

select id,user_id,storage
from uploads t
where storage+coalesce((select sum(storage) from uploads 
                        where storage<t.storage 
                        or (storage=t.storage and id < t.id)),0) < 410000
order by storage