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

如何编写SQL查询在SELECT子句中添加item分组内的排序序号

分组排序生成序号实现方案

你这个需求是典型的分组内排序编号场景,直接用窗口函数就能实现。

原始测试数据

order iditem
1A
1B
5A
3B

预期输出

新增order字段为相同item分组下,按order id升序排列的连续序号:

order iditemorder
1A1
5A2
1B1
3B2

标准SQL实现(支持MySQL8.0+、PostgreSQL、SQL Server等主流数据库)

假设你的数据表名为order_info,直接执行以下查询即可:

SELECT
  `order id`,
  item,
  ROW_NUMBER() OVER (
    PARTITION BY item 
    ORDER BY `order id`
  ) AS `order`
FROM order_info
-- 最后排序是为了让同item的数据集中展示,和你给出的结果顺序一致
ORDER BY item, `order id`;

语法说明

  • PARTITION BY item 指定分组维度,不同item的序号独立计算
  • ORDER BY order id`` 指定分组内的排序规则,按订单id从小到大编号
  • 因为order是SQL保留关键字,作为字段别名时必须用反引号包裹,否则会报语法错误

旧版MySQL 5.x 兼容写法

如果你的数据库版本不支持窗口函数,可以用用户变量模拟实现相同效果:

SELECT
  `order id`,
  item,
  @row_num := IF(@current_item = item, @row_num + 1, 1) AS `order`,
  @current_item := item
FROM order_info, (SELECT @current_item := NULL, @row_num := 0) AS var_init
ORDER BY item, `order id`;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:27:26