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

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

子车超英
2023-03-14
问题内容

我想选择总计为特定值的行。

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

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

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


问题答案:

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


 类似资料:
  • 问题内容: 假设我有一个这样的表: AB 3 CD 1 EF 2 GH 4 最后一列的总和为10,我希望最大的总和至少为总价值的60%。因此,在这种情况下,它将返回 GH 4 AB 3 最高上升到70%,但如果仅选择第一个值,则最高上升到40%。即使可能会有组合返回正好60%的组合,我们也要取最大的数字。 因此,我想我知道如何从最大到最小对值进行排序,以及如何对所有值求和,但是我不知道如何只取总和

  • 问题内容: 从pandas数据框中选择所有行的最简单方法是什么?谁的符号在整个表中恰好出现两次?例如,在下表中,我想选择在[‘b’,’e’]中带有sym的所有行,因为这些符号的value_counts等于2。 问题答案: 我认为您可以按列和值使用: 第二个解决方案使用与布尔索引: 并用最快的解决方案和:

  • 问题内容: 说有这样的表: 字段名称很容易解释。我想选择同时具有1和3 的,因此在此示例中仅。我想到了类似的 清单,之后我想列出该组中存在的。我怎么做? 问题答案: 如果没有任何唯一约束,请尝试: 如果仅尝试检测两个值,请使用此子句: 如果post_id和tag_id都具有唯一约束,那么这也应该起作用:

  • 问题内容: 这是我的基本表(显示为关联数组): 在另一个名为的表上,我可以添加多个属于一行的自定义数据。像这样: 我目前正在制作,但它只会增加,并给我行。我想要的是我的查询返回如下内容: 行值变成一列,而,它就是值。 我该怎么做? 问题答案: SELECT a.ID, a.Campaign_ID, a.FirstName, a.LastName, MAX(CASE WHEN b.data = ‘q

  • 问题内容: 如何在 不引用 SQL表达式中的 特定列的情况下 选择所有可能包含已知特定值的记录? 例如,我知道,某个 未知 列包含值“ xxx”,并且表中有 许多列 和记录。 谢谢你。 问题答案: 因此,您想对数据库进行类似于Google的免费文本搜索。可以做到,但表演将是Teh Suck!Google之所以快速,是因为它在其索引上具有索引,重复的数据存储,并且通常针对这种搜索进行总体优化。 无论

  • 问题内容: 我正在使用SQL Server 2012,并且正在尝试执行以下操作: 因此,换句话说,我想从表中选择具有指定的截止日期和日期的随机行,并在里程总和等于或大于该数字时停止:3250 问题答案: 由于您使用的是SQL Server 2012,因此这是一种无需循环的简单方法。 SQLfiddle演示-多次单击“运行SQL”以查看随机结果。