You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何按item字段分组生成递增序号并更新对应no字段

适用支持窗口函数的主流数据库(MySQL 8.0+/PostgreSQL/SQL Server/Oracle)

使用ROW_NUMBER()窗口函数即可实现按item分组的独立递增序号,若要更新原表的no字段,写法如下:

UPDATE 你的实际表名 t1
INNER JOIN (
    SELECT 
        表主键ID, -- 替换为你表内的唯一主键字段名
        ROW_NUMBER() OVER (PARTITION BY item ORDER BY 表主键ID) AS new_no
    FROM 你的实际表名
) t2 ON t1.表主键ID = t2.表主键ID
SET t1.no = t2.new_no;

注意:ORDER BY后的字段可根据业务需求调整,比如要按记录插入时间排序就替换为对应时间字段,只要能确定组内的排序规则即可。

如果仅需要查询时生成序号,不需要修改原表,可直接用以下语句:

SELECT 
    item,
    ROW_NUMBER() OVER (PARTITION BY item ORDER BY 表主键ID) AS no
FROM 你的实际表名;

适用不支持窗口函数的低版本数据库(如MySQL 5.x)

可通过用户变量实现分组计数逻辑:

UPDATE 你的实际表名 t1
INNER JOIN (
    SELECT 
        表主键ID,
        @row_num := IF(@current_item = item, @row_num + 1, 1) AS new_no,
        @current_item := item
    FROM 你的实际表名
    ORDER BY item, 表主键ID
) t2 ON t1.表主键ID = t2.表主键ID,
(SELECT @row_num := 0, @current_item := NULL) AS init
SET t1.no = t2.new_no;

内容的提问来源于stack exchange,提问作者grn.developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 23:54:03