如何在SQL中对满足指定条件的行分配从1开始的递增计数
实现
Calc列为"NEW"的行Results列递增赋值SQL方案 处理逻辑为筛选表中Calc字段值为NEW的行,给这些行的Results字段赋值从1开始的连续递增计数,不同数据库的实现方式如下:
主流数据库通用方案(支持窗口函数的版本:MySQL 8.0+、PostgreSQL、SQL Server、Oracle)
通过ROW_NUMBER()窗口函数生成目标序号后关联更新:
UPDATE 你的表名 t1 INNER JOIN ( SELECT 表主键字段, ROW_NUMBER() OVER(ORDER BY 排序规则字段) AS new_num FROM 你的表名 WHERE Calc = 'NEW' ) t2 ON t1.表主键字段 = t2.表主键字段 SET t1.Results = t2.new_num;
- 参数替换说明:
- 替换
你的表名为实际操作的表名称 - 替换
表主键字段为表中可以唯一确定一行数据的标识字段,多字段唯一的话可以写多个关联条件 - 替换
ORDER BY后的排序规则字段为你需要的计数排序依据,比如按创建时间、主键ID排序均可,保证序号生成逻辑符合业务需求即可
- 替换
低版本MySQL(5.x及以下不支持窗口函数版本)方案
通过自定义变量生成递增序号:
SET @count = 0; UPDATE 你的表名 SET Results = (@count := @count + 1) WHERE Calc = 'NEW' ORDER BY 排序规则字段;
验证建议
执行更新操作前,可以先运行查询语句确认计数结果是否符合预期,避免误操作:
SELECT 表主键字段, Calc, ROW_NUMBER() OVER(ORDER BY 排序规则字段) AS 预期Results值 FROM 你的表名 WHERE Calc = 'NEW';
内容的提问来源于stack exchange,提问作者dhans
相关产品推荐
相关产品推荐

