2016-07-29 72 views
3

我想选择总计达到某个值的行。SQL:如何选择总计达到特定值的行

我的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.

我已经试过一切,但它没有工作: (

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

+0

用PHP这将是微不足道的你想要一个MySQL的唯一的解决办法? –

+0

看起来你对StackOverflow来说比较新。如果答案对你有帮助,一定要投票。如果它解决了您的问题,请将答案标记为已接受。 –

+0

@GeorgePant不,PHP会更好:) –

回答

1

您可以使用相关子查询来获取运行总数并检索其运行总数为<指定数字的那些行。 (请注意,我改变了存储列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 
+0

非常好。它的工作原理! –

+0

哦发现问题:http://sqlfiddle.com/#!9/70e704/1 –

+0

你需要选择这些行中只有一行具有相同的值。在这种情况下,在user_id和storage中使用'group by'。但是,这在其他情况下也会出现问题..我会解决它。 –

2

的SUM()函数返回数值列的总和。

SQL SUM()语法

SELECT SUM(column_name) FROM table_name; 
+0

我知道,但没有让我到任何地方:( –

+0

对不起,你想去的地方请尝试解释我会按照你的要求编辑我的答案。 –

1

这是你所需要的:

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

我补充说: “ORDER BY存储ASC” 来跳过有多少存储行。