如何在postgresql group by子句中为分组行添加数字

mof*_*oda 11 postgresql group-by row

我有一个PostgreSQL表,在文本列中包含重复值.它看起来像这样:

gid, capt
1, foo
2, foo
3, bar
4, bar
5, bar
6, buz
7, buz
Run Code Online (Sandbox Code Playgroud)

我需要为组中的每个值添加一个具有不同数字的列,因此我的表应如下所示:

gid, capt, rnum
1, foo, 1
2, foo, 2
3, bar, 1
4, bar, 2
5, bar, 3
6, buz, 1
7, buz, 2
Run Code Online (Sandbox Code Playgroud)

它是每个组内的一种行号,始终从1开始.任何人都可以给我一个适当的SELECT语句吗?

Pol*_*k-Z 25

这个问题及其答案的帮助下:

SELECT gid, capt, row_number() OVER (PARTITION BY capt ORDER BY gid) AS rnum
FROM your_table_here ORDER BY gid;
Run Code Online (Sandbox Code Playgroud)

row_number 窗函数提供了计数.

该子句PARTITION BY中的OVER语句告诉数据库在每次更改时重新开始编号capt.在ORDER BYOVER子句告诉数据库与GID列一起算.