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
相关产品推荐
相关产品推荐

