如何在条件中找到Sum(字段),即"select*from sum of sum(field)<150"

Ram*_*esh 2 mysql sql

我只需要检索大小字段的总和值<= 150的特定记录.我有下面的表......

userid size
1       70
2      100   
3       50
4       25
5      120
6       90
Run Code Online (Sandbox Code Playgroud)

输出应该是......

userid size
1       70
3       50
4       25
Run Code Online (Sandbox Code Playgroud)

例如,如果我们添加70,50,25,我们得到145,<= 150.

我将如何编写查询来完成此任务?

bri*_*gge 5

这是一个产生上述结果的查询:

SELECT * FROM `users` u
WHERE (select sum(size) from `users` where size <= u.size order by size) < 150
ORDER BY userid
Run Code Online (Sandbox Code Playgroud)

但是,您描述的想要选择最接近特定尺寸的用户的问题装箱问题.这是NP-Hard问题,使用ANSI SQL无法轻松解决.但是,上面似乎返回了正确的结果,但实际上它只是从最小的项目开始,并继续添加项目,直到bin已满.

一般的,更有效的装箱算法是从最大的项目开始,并在适合时继续添加较小的装箱算法.该算法将选择用户5和4.