SQL 按条件拆分组

Posted

技术标签:

【中文标题】SQL 按条件拆分组【英文标题】:SQL break groups by a condition 【发布时间】:2020-10-12 10:25:28 【问题描述】:

假设我有这张桌子:

timestamp | is_break | data
----------+----------+------
 0        | 1        | 10
 1        | 0        | 20
 2        | 1        | 5
 3        | 1        | 10
 4        | 0        | 20
 5        | 0        | 30

如何按 is_break 列将数据分组?

例如按组获取数据的AVG如:

min_timestamp | avg_data
--------------+---------
 0            | 15        
 2            | 5
 3            | 20    

【问题讨论】:

【参考方案1】:

您可以使用聚合。我们如何定义组?在is_break 列上有一个窗口总和:

select min(timestamp), avg(date) avg_date
from (
    select t.*, sum(is_break) over(order by timestamp) grp
    from mytable t
)
group by grp

【讨论】:

以上是关于SQL 按条件拆分组的主要内容,如果未能解决你的问题,请参考以下文章

将数组拆分为按对象属性分组的 2 个数组 [重复]

根据条件将元组列表拆分为单独的列表

sql多条件分组查询,求sql语句。

SSIS 多个条件拆分

根据条件将单个数据行拆分为多个数据行的 SQL 脚本

如何根据 Oracle SQL 中的某些条件将列拆分为 2?