如何根据总和值选择特定记录
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”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tagpostgresql
, 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
Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)