SQL 查询 - 分组并计算最大值 - 最小值

Posted

技术标签:

【中文标题】SQL 查询 - 分组并计算最大值 - 最小值【英文标题】:SQL Query- Partition into groups & calculate max- min value 【发布时间】:2012-09-19 17:40:04 【问题描述】:

在 Oracle 数据库中的 SQL 查询方面需要您的帮助。当事件 =“开始”时,我有想要分组的数据。例如。第 1-6 行是一个组,第 7-9 行是一个组。我想忽略事件 =“忽略”的行。最后我想计算这些组的 max(Value)-min(Value)。我没有办法对数据进行分组。

这可以实现吗?是否可以通过 Event = start 使用分区。相同的数据如下:

行事件值要求结果是值的最大值-最小值 1 开始 10 2个11 3乙12 4 C 13 5 天 14 6 E 15 5 ------------------------------------------ 7 开始 16 8个18 9 乙 20 4 ------------------------------------------ 10 开始 27 11 一个 30 12乙33 13 C 34 7 ------------------------------------------ 14 忽略 35 ------------------------------------------ 15 忽略 36 ------------------------------------------ 16 开始 33 17一34 18 乙 35 19 C 36 20 天 37 21 东 38 5 --------------------------------------------------------

【问题讨论】:

【参考方案1】:

是的,您可以在 SQL 中执行此操作。

以下查询首先通过查找行 id 之前的最大开始来查找行所在的组。此版本使用相关子查询进行此计算。

然后对 id 进行分组并进行计算。

select groupid, max(value) - min(value)
from (select t.*,
             (select max(row) from t t2 where t2.row < t.row and t2.event = start
             ) as groupid
      from t
     ) t
where event <> 'IGNORE'

【讨论】:

以上是关于SQL 查询 - 分组并计算最大值 - 最小值的主要内容,如果未能解决你的问题,请参考以下文章

mssql 2005查询 请问我要实现分组获取最大值,怎么写sql查询指令

MySQL 聚合函数 和 分组查询(初级)

MySQL 聚合函数 和 分组查询(初级)

MySQL 聚合函数 和 分组查询(初级)

SQL语句汇总——聚合函数分组子查询及组合查询

SQL语句汇总(三)——聚合函数分组子查询及组合查询 - Darly