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

如何在MySQL查询中使用Row_Number函数实现行号生成功能

MySQL实现ROW_NUMBER()行号生成的正确方案

原代码错误原因

  • ORDER BY字段索引错误:你的SELECT语句仅返回3个字段(name、Qtd、rank),写order by 5 desc找不到对应字段,会直接触发语法报错
  • 行号计算时机错误:直接在聚合查询中计算行号,会导致行号在排序操作之前生成,最终行号顺序和你预期的Qtd降序规则不一致

方案1:MySQL 8.0及以上版本(推荐,和SQL Server用法完全一致)

直接用原生支持的窗口函数ROW_NUMBER(),无需手动维护变量,逻辑更稳定:

SELECT 
  name,
  Qtd,
  ROW_NUMBER() OVER(ORDER BY Qtd DESC) AS rownum
FROM (
  SELECT 
    i.name, 
    SUM(quantity) Qtd
  FROM orders o 
  JOIN order_items i ON o.id = i.order_id
  WHERE i.product_id NOT IN ('wpp001', '147426')
  GROUP BY i.name
  LIMIT 10
) t

方案2:MySQL 5.x及更低版本(用用户变量实现)

先完成聚合、排序操作,再在外层计算行号,避免行号顺序错乱:

SET @rownum:=0;
SELECT 
  name,
  Qtd,
  @rownum := @rownum + 1 AS rownum
FROM (
  SELECT 
    i.name, 
    SUM(quantity) Qtd
  FROM orders o 
  JOIN order_items i ON o.id = i.order_id
  WHERE i.product_id NOT IN ('wpp001', '147426')
  GROUP BY i.name
  ORDER BY Qtd DESC
  LIMIT 10
) t

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:45:02