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

MySQL筛选指定名称数据并按ID排序显示行序号时#1055错误的解决求助

解决MySQL中筛选记录并添加连续序号的问题

嘿,我来帮你搞定这个问题!首先咱们先理清你遇到的问题根源:你之前的SQL用了GROUP BY id,但这完全没必要——你的需求是给每条符合条件的记录加连续序号,不是要做聚合统计,而且MySQL的ONLY_FULL_GROUP_BY模式会强制要求SELECT列表里的非聚合列必须出现在GROUP BY子句里,这就是你触发#1055错误的核心原因。

正确解决方案(MySQL 8.0+版本推荐)

用窗口函数ROW_NUMBER()是最简洁规范的实现方式,完全匹配你的需求:

SELECT 
    id,
    name,
    ep,
    ROW_NUMBER() OVER (ORDER BY id ASC) AS count
FROM episodios
WHERE name = 'test'
ORDER BY id ASC;

代码说明:

  • WHERE name = 'test':精准筛选出name字段为'test'的记录
  • ROW_NUMBER() OVER (ORDER BY id ASC):按照id升序的顺序,为每条记录生成唯一的连续序号
  • 最后的ORDER BY id ASC保证结果集的顺序和序号生成逻辑完全一致

兼容MySQL 5.x版本的方案

如果你还在使用不支持窗口函数的MySQL 5.x版本,可以用用户变量来实现相同效果:

SELECT 
    id,
    name,
    ep,
    @row_num := @row_num + 1 AS count
FROM episodios,
     (SELECT @row_num := 0) AS init_var
WHERE name = 'test'
ORDER BY id ASC;

代码说明:

  • (SELECT @row_num := 0) AS init_var:初始化一个名为@row_num的变量,初始值设为0
  • @row_num := @row_num + 1:每查询到一条符合条件的记录,就把变量值加1,以此生成连续递增的序号
  • 同样通过WHERE筛选目标记录,ORDER BY id ASC确保序号严格按照id升序生成

执行以上任意一段SQL,就能得到你想要的结果:

id - name - ep - count
930 - test - 1 - 1
931 - test - 2 - 2
932 - test - 3 - 3
933 - test - 4 - 4
934 - test - 7 - 5
935 - test - 9 - 6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:18:13