PostgreSQL中按Plan No.分组生成组内行号的实现方案
在PostgreSQL中按Plan No.分组生成连续行号
需求:针对Plan No.列值相同的记录,生成组内连续的行号(rownum)。
原始数据
| Plan No. | item ID |
|---|---|
| T190931 | 201022 |
| T190931 | 220933 |
| T190932 | 289338 |
| T190933 | 374882 |
| T190936 | 093022 |
| T190936 | 266679 |
| T190936 | 346762 |
| T190936 | 327392 |
预期结果
| Plan No. | item ID | rownum |
|---|---|---|
| T190931 | 201022 | 1 |
| T190931 | 220933 | 2 |
| T190932 | 289338 | 1 |
| T190933 | 374882 | 1 |
| T190936 | 093022 | 1 |
| T190936 | 266679 | 2 |
| T190936 | 346762 | 3 |
| T190936 | 327392 | 4 |
解决方案
使用PostgreSQL的窗口函数ROW_NUMBER(),结合PARTITION BY实现分组编号:
SELECT "Plan No.", "item ID", ROW_NUMBER() OVER (PARTITION BY "Plan No." ORDER BY "item ID") AS rownum FROM your_table_name;
说明
PARTITION BY "Plan No.":将数据按Plan No.分组,每个分组单独计算行号ORDER BY "item ID":指定分组内行号的排序规则,确保行号稳定(若无需特定顺序可省略,但建议保留以避免结果随机)ROW_NUMBER():为每个分组内的记录生成从1开始的连续行号
内容的提问来源于stack exchange,提问作者Nur Jayah
相关产品推荐
相关产品推荐

