如何根据总和值选择特定记录

Posted

技术标签:

【中文标题】如何根据总和值选择特定记录【英文标题】:how to select specific records based on total sum value 【发布时间】:2018-08-23 10:30:08 【问题描述】:

我有以下 SQL 表

ID Key Value
1  A   10
2  A   20
3  B   50
4  B   2
5  C   30
6  c   20

我需要从该表中选择所有记录,其中 Value 的总和为 25。因此,对于 Key A,ID 为 1 和 2 的记录应该出来。对于密钥 B,记录 ID 为 3,对于密钥 C,记录 ID 应为 5。

我正在尝试类似的东西,但这给出了一个错误,仍在尝试。

select ID, Key, Value
from T
where Sum(value)> 25
Group by ID, Key

有什么建议可以得到想要的套装吗?

编辑:添加服务器名称。

【问题讨论】:

我看不到您的样本数据如何产生您想要的结果。例如,记录 ID 5 的键值为“B”,而不是“C”。 投票结束,因为不清楚您的要求,因为您的示例数据没有意义,而且您从未告诉我们您的实际数据库,这可能决定可以使用哪种类型的方法。 更新了数据集,之前有错别字 @TimBiegeleisen 。 . .你可能会重新考虑你的近距离投票。这个问题相当清楚。 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ... 【参考方案1】:

我认为您希望所有具有给定键值的行的第一个运行总和超过 25。使用累积总和函数:

select t.*
from (select t.*, sum(value) over (partition by key order by id) as running_value
      from t
     ) t
where running_value - value < 25;

【讨论】:

感谢您的想法.. 这很有意义 你怎么知道OP的数据库支持解析函数? @TimBiegeleisen 。 . .几十年来,分析函数一直是 SQL 标准的一部分,并且在所有主要数据库中都可用(当然,这是我对“主要”定义的一部分,所以它有点重言式;)。 Gordon,你做对了,像往常一样,但是如果 OP 使用的是 mysql 8+ 之前的版本或者 SQLite,你的查询将无济于事。只是说。

以上是关于如何根据总和值选择特定记录的主要内容,如果未能解决你的问题,请参考以下文章

如何根据不同df中提供的索引值对数据框中的特定列进行求和。返回总和和布尔 T/F

根据其他列的值选择总和

xsl如何根据来自不同元素的属性汇总一种特定类型元素的总和

Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)

Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]

如何根据特定列的值从 CSV 文件中选择值