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

MySQL SELECT查询结果如何正确显示逐行连续行号

问题原因

你当前语句返回的行号全为1,是对窗口函数row_number()的partition by子句逻辑理解有误:

  • partition by的作用是将结果集按照指定字段拆分为多个独立分区,窗口函数会在每个分区内部单独计算行号
  • 你写的partition by item_num会把每个不同的item_num值单独划分为一个分区,每个分区内仅1条数据,因此所有行计算出的行号都是1
修正方案

你需要的是对整个查询结果集逐行生成连续行号,不需要使用partition by做分区拆分,根据你对行号排序稳定性的要求,选择对应写法即可:

  1. 仅需要返回连续行号、不要求行号对应固定排序规则
    直接删除partition by子句即可:
    select item_num, row_number() over() as row_number from items;
    

    注意:MySQL官方明确说明,窗口函数不指定order by时,返回的行号顺序不做稳定性保证,可能随数据存储位置、执行计划变化而变动。

  2. 需要固定行号的排序逻辑(推荐)
    在窗口函数内增加order by子句明确排序规则,生成的行号结果稳定可预期:
    • 若要按照item_num字段升序排列生成行号:
      select item_num, row_number() over(order by item_num) as row_number from items;
      
    • 若要按照数据原始插入顺序生成行号,可使用表内的自增主键(通常命名为id)作为排序依据:
      select item_num, row_number() over(order by id) as row_number from items;
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:22:18