如何按分组为行编号,实现同id下相同sub_id对应序号一致
实现方案
你的需求核心是相同id分组内,相同sub_id对应的number值完全一致,之前用row_number()不符合预期的原因是:row_number()会给分区内的每一行生成唯一的连续序号,即便两行的sub_id完全相同,也会生成不同的序号。
使用DENSE_RANK()窗口函数即可实现需求,示例代码如下:
SELECT id, num, sub_id, DENSE_RANK() OVER (PARTITION BY id ORDER BY sub_id) AS number FROM 你的表名
逻辑说明
PARTITION BY id:按照id字段分组,不同id的序号计算互不干扰ORDER BY sub_id:同id分组内按照sub_id升序排序,相同的sub_id会得到相同的排名DENSE_RANK():生成序号时相同值排名一致,序号不会产生断层,刚好匹配需求要求的输出规则
运行上述代码后得到的结果和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者user458
相关产品推荐
相关产品推荐

