带计数器的SQL表数据查询插入问题求助
问题解决:生成组内递增counter并插入新表
你的SQL之所以得到每组总数而非递增序号,是因为子查询统计的是整个分组的总记录数,每条数据都会返回这个总数。要实现组内递增的序号,需要用**窗口函数ROW_NUMBER()**来生成行号。
正确的插入SQL语句
INSERT INTO temp_1 (seq, prefix, counter) SELECT seq, prefix, -- 按seq和prefix分组,组内生成从1开始的递增序号 ROW_NUMBER() OVER (PARTITION BY seq, prefix ORDER BY (SELECT NULL)) AS counter FROM temp;
关键说明
PARTITION BY seq, prefix:指定按seq与prefix的组合作为分组依据ROW_NUMBER():在每个分组内生成从1开始的连续递增序号ORDER BY (SELECT NULL):如果不需要特定的排序顺序可以用这个写法;如果你的temp表有主键或时间字段(比如id、create_time),建议替换成实际字段来保证序号的稳定性,比如ORDER BY id
原SQL问题分析
你之前的子查询:
(SELECT COUNT(*) FROM temp t WHERE t.seq = t2.seq AND t.prefix = t2.prefix)
作用是统计当前seq+prefix分组的总记录数,所以每条数据都会返回同一个总数,无法生成组内递增的序号。
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

