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

如何将MySQL 8.0的ROW_NUMBER()函数转换为MySQL 5.7兼容语法

MySQL 5.7 替代 ROW_NUMBER() 的等效查询方案

原查询的作用是:按website字段分组,每组保留按id升序排列的前3条记录,最终结果按datePub升序输出。以下是适配MySQL 5.7的等效写法:

SELECT *
FROM (
    SELECT 
        s.*,
        @row_num := CASE 
            WHEN @current_website = s.website THEN @row_num + 1 
            ELSE 1 
        END AS r_num,
        @current_website := s.website
    FROM sites s
    CROSS JOIN (SELECT @row_num := 0, @current_website := '') AS vars
    ORDER BY s.website, s.id ASC
) AS t
WHERE t.r_num < 4
ORDER BY t.datePub ASC;

逻辑说明

  • 使用用户变量@current_website跟踪当前分组的website值,@row_num记录组内的行号
  • 遍历数据时,若当前行的website与变量记录的一致,行号自增;否则重置行号为1,并更新分组变量
  • 内层查询必须先按website和id排序,确保分组和组内排序的正确性,保证变量能准确计算行号
  • 外层筛选出行号小于4的记录(即每组前3条),再按datePub排序输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:05:23