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

MySQL按title分组为组内记录添加自增序号的实现方法

按Title分组生成自增序号的实现方案

针对你的需求,我们可以结合去重操作和**窗口函数(或变量)**来实现按title分组、从1开始的自增序号。以下分主流数据库和低版本MySQL两种场景给出方案:

主流数据库(MySQL 8.0+/PostgreSQL/SQL Server/Oracle)

这类数据库支持窗口函数,写法简洁直观:

SELECT 
    title,
    date,
    -- 按title分组,组内按date排序生成自增序号
    ROW_NUMBER() OVER (PARTITION BY title ORDER BY date) AS no
FROM (
    -- 先对title和date去重,替代原GROUP BY逻辑
    SELECT DISTINCT title, date
    FROM your_table
) AS deduplicated
-- 保持结果按title、date排序
ORDER BY title, date;

说明:

  • DISTINCT title, date 和你原SQL的GROUP BY title, date效果完全一致,用于获取去重后的title-date组合
  • ROW_NUMBER() OVER (PARTITION BY title ORDER BY date) 是核心:PARTITION BY title指定按title分组,ORDER BY date定义组内的排序规则,最终每个分组内生成从1开始的连续序号

低版本MySQL(5.x及以下,不支持窗口函数)

用用户变量来模拟分组自增逻辑:

SELECT 
    title,
    date,
    -- 对比当前行与上一行的title,相同则序号+1,否则重置为1
    @row_num := CASE 
        WHEN @prev_title = title THEN @row_num + 1 
        ELSE 1 
    END AS no,
    -- 更新变量,记录当前行的title
    @prev_title := title
FROM (
    -- 先去重并按title、date排序,确保变量逻辑正确执行
    SELECT DISTINCT title, date
    FROM your_table
    ORDER BY title, date
) AS deduplicated
-- 初始化变量
CROSS JOIN (SELECT @row_num := 0, @prev_title := '') AS vars;

说明:

  • 必须先对去重后的结果排序,否则变量无法正确识别分组边界
  • 通过@prev_title记录上一行的title,@row_num维护当前序号,实现分组自增的效果

内容的提问来源于stack exchange,提问作者Mario

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:52:50