【问题标题】: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, ...

标签: sql sql-server


【解决方案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,你的查询将无济于事。只是说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2011-09-25
  • 2016-02-17
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多