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 BY中OVER子句告诉数据库与GID列一起算.