问题描述
SELECT * FROM `users` u
WHERE (select sum(size) from `users` where size <= u.size order by size) < 150
ORDER BY userid
但是,您描述的想要选择最适合给定大小的用户的问题是装箱问题。这是一个NP- Hard问题,用ANSI sql很难解决。但是,以上内容似乎返回了正确的结果,但实际上,它只是从最小的项目开始,然后继续添加项目,直到垃圾箱已满。
通用,更有效的装箱算法将是从最大的物品开始,并在适合时继续添加较小的物品。该算法将选择用户5和4。
解决方法
我只需要检索大小字段总和为<= 150的特定记录。我有下面的桌子…
userid size
1 70
2 100
3 50
4 25
5 120
6 90
输出应为…
userid size
1 70
3 50
4 25
例如,如果我们加上70,50,25,我们得到145,即<= 150。
我将如何编写查询来完成此任务?