在PostgreSQL中,我有一个表,其中有一列长时间重复的0和1。我想创建另一个列,用重复的等级对这些进行排名。下面是我想看到的一个例子:
| 新栏目| New column |
| - -----| ------------ |
| 一个| 1 |
| 一个| 1 |
| 一个| 1 |
| 2| 2 |
| 2| 2 |
| 2| 2 |
| 2| 2 |
| 三个| 3 |
| 三个| 3 |
| 三个| 3 |
| 三个| 3 |
| 三个| 3 |
| 4| 4 |
| 4| 4 |
| 5个| 5 |
| 5个| 5 |
| 5个| 5 |
等等。带秩的表函数能否有效地用于此?或者这超出了窗口函数的能力?谢谢
1条答案
按热度按时间dy2hfwbg1#
可以使用窗口函数;我们可以用
lag
得到前一个值,然后计算值变化的窗口计数来定义每个记录所属的组。当然,这需要一个列来对表进行排序,比如
id
:| 山坳|grp| grp |
| - -----|- -----| ------------ |
| 0|一个| 1 |
| 0|一个| 1 |
| 0|一个| 1 |
| 一个|2| 2 |
| 一个|2| 2 |
| 一个|2| 2 |
| 一个|2| 2 |
| 0|三个| 3 |
| 0|三个| 3 |
| 0|三个| 3 |
| 0|三个| 3 |
| 0|三个| 3 |
| 一个|4| 4 |
| 一个|4| 4 |
| 0| 5个| 5 |
| 0| 5个| 5 |
| 0| 5个| 5 |
fiddle