小编典典

SQL:如何选择总计为特定值的行

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。

我已经尝试了一切,但是没有用:(

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


阅读 163

收藏
2021-04-28

共1个答案

小编典典

您可以使用相关子查询来获取运行总计,并检索其运行总计小于指定数量的行。(请注意,我将存储列更改为int。如果它是a,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
2021-04-28