当前位置: 首页 > 面试题库 >

如何在以下条件下找到Sum(field),即``从sum(field)<150的表中选择*''。

冯阳成
2023-03-14
问题内容

我只需要检索大小字段总和为<= 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。

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


问题答案:

这是一个查询,将产生以上结果:

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。



 类似资料:
  • 问题内容: 如果我有很多话要说,请提供一些用户的ID。我该怎么做这样的事情: 有没有一种简单的方法可以做到这一点,我考虑过遍历数组项,然后建立一个大的“ WHERE-OR-OR-OR”语句,但是我认为对于大型数组可能有点慢。 问题答案: 用途: 您可以用来从数组中获取列表。

  • 问题内容: 是否可以做这样的事情: 我尤其要在除法结果值上放置一个where条件 问题答案: 这可以通过HAVING子句完成: 注意:添加了放置语句的位置 查询优化器也不应该多次计算平均值,因此在这里不必担心。 正如@jagra的答案中提到的那样,您应该可以使用而不是

  • 问题内容: 如何将sql查询写入hibernate条件? 问题答案: 想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:

  • 问题内容: 如何将sql查询写入休眠条件? 问题答案: 认为我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:

  • 问题内容: 我有以下方式的数据: 我想要正数量的总和(数量> 0)和负数量的总和(数量<0)。 如何根据条件获取这些列的总和? 问题答案: 您可以使用: LiveDemo

  • 问题内容: 有没有一种方法可以在SQL中同时选择一列和其他列的总和? 例子: 问题答案: 尝试添加GROUP BY