首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在红移中有条件地使用窗口函数

在红移中有条件地使用窗口函数
EN

Stack Overflow用户
提问于 2020-02-17 09:05:54
回答 2查看 1.3K关注 0票数 1

我有一张有以下数据的表格:

链接到测试数据:http://sqlfiddle.com/#!15/dce01/1/0

我希望按照seq列指定的顺序为gid中的每个组聚合items列(使用listagg),其条件是当pid再次成为组的0时聚合结束。

也就是说,对于g1组,将有两个聚合;一个用于seq1-3,另一个用于序列4-6;因为对于g1组,pid对于seq 4为0。

我期望给定示例的结果如下(请注意,结果中的seq是pid变为0的组的seq的最小值):

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-17 11:09:39

我将您的问题理解为空白和孤岛问题,您希望将具有相同gid的相邻行组合在一起,直到满足具有值0pid为止。

下面是一种使用窗口和来定义组的方法:基本上,每次遇到pid值0时,都会启动一个新的岛。其余的只是聚合:

代码语言:javascript
复制
select
    gid,
    min(seq) seq,
    listagg(items, ',') within group(order by seq) items
from (
    select 
        t.*,
        sum(case when pid = 0 then 1 else 0 end) over(partition by gid order by seq) grp
    from mytable t
) t
group by gid, grp
order by gid, grp
票数 2
EN

Stack Overflow用户

发布于 2020-02-17 11:12:47

这是缺口和岛屿问题:

代码语言:javascript
复制
with
 subgroup_ids as (
    select *, sum(case when pid=0 then 1 else 0 end) over (partition by gid order by seq) as subgroup_id
    from tablename
)
select gid, subgroup_id, listagg(items,',')
from subgroup_ids
group by 1,2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60258980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档