不带pl/SQL的SQL GROUP TABLE BY"前导行(&Q) [英] SQL group table by "leading rows" without pl/sql

查看:22
本文介绍了不带pl/SQL的SQL GROUP TABLE BY"前导行(&Q)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含两列的表格(小示例)

1 a
2 a
3 a3
4 a
5 a
6 a6
7 a
8 a8
9 a

我想将它们分组/划分为由前导"a"分隔的组,理想情况下是添加另一列,这样我就可以轻松地处理这些组。

1 a  0
2 a  0
3 a3 3
4 a  3
5 a  3
6 a6 6
7 a  6
8 a8 8
9 a  8

问题是表的设置是动态的,所以我不能使用静态的LAG或LEAD函数,有什么想法在没有Postgres版本9.5中的pl/SQL的情况下如何做到这一点

推荐答案

这可以通过将包含a的行设置为特定值,将所有其他行设置为不同的值来实现。然后使用累计和来获得所需的行数。当在VAL列中遇到新值时,会将组号设置为下一个编号,并且所有具有a的后续行将具有与之前相同的组号,并继续执行此操作。

我假设您需要为每个组指定一个不同的数字,而数字并不重要。

select id, val, sum(ex) over(order by id) cm_sum
from (select t.*
      ,case when val = 'a' then 0 else 1 end ex
      from t) x

上述包含相关数据的查询的结果为

id  val cm_sum
--------------
1   a   0
2   a   0
3   a3  1
4   a   1
5   a   1
6   a6  2
7   a   2
8   a8  3
9   a   3

这篇关于不带pl/SQL的SQL GROUP TABLE BY"前导行(&Q)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆