不带pl/SQL的SQL GROUP TABLE BY";前导行(&Q) [英] SQL group table by "leading rows" without pl/sql
本文介绍了不带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屋!
查看全文