postgresql – 窗口函数和更多“本地”聚合

前端之家收集整理的这篇文章主要介绍了postgresql – 窗口函数和更多“本地”聚合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有这个表:
select * from window_test;

 k | v
---+---
 a | 1
 a | 2
 b | 3
 a | 4

最终我想得到:

k | min_v | max_v
---+-------+-------
 a | 1     | 2
 b | 3     | 3
 a | 4     | 4

但我会很高兴得到这个(因为我可以轻松地过滤掉它):

k | min_v | max_v
---+-------+-------
 a | 1     | 2
 a | 1     | 2
 b | 3     | 3
 a | 4     | 4

使用Postgresql 9.1窗口函数可以实现这一点吗?我试图理解我是否可以使用单独的分区来表示此样本中第一次和最后一次出现的k = a(按v排序).

这将返回包含样本数据的所需结果.不确定它是否适用于真实世界的数据:
select k,min(v) over (partition by group_nr) as min_v,max(v) over (partition by group_nr) as max_v
from (
    select *,sum(group_flag) over (order by v,k) as group_nr
    from (
    select *,case
              when lag(k) over (order by v) = k then null
              else 1
            end as group_flag
    from window_test
    ) t1
) t2
order by min_v;

我遗漏了DISTINCT.

猜你在找的Postgre SQL相关文章