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

使用WITH AS+ROW_NUMBER()取部门Top2用户报错,求原因

问题原因分析

你的WITH AS写法报错主要有两个可能的原因,核心原因是MySQL版本限制:

1. MySQL版本不支持CTE(WITH AS)语法

MySQL在8.0版本及以后才正式支持公共表表达式(CTE,即WITH AS语法)。如果你的MySQL服务器版本低于8.0,使用WITH AS会直接触发1064语法错误——因为低版本MySQL根本无法识别这个语法结构。而子查询是MySQL全版本支持的写法,所以能正常执行。

你可以执行以下语句查看当前MySQL版本:

SELECT VERSION();

2. 字段别名的引号使用问题(次要因素)

你给ROW_NUMBER()结果设置的别名是'row_number'(单引号包裹),在MySQL中,单引号通常用于表示字符串字面量,而非标识符(比如字段名、别名)。虽然子查询中MySQL能兼容这种写法,但在CTE上下文里可能会干扰语法解析。建议改用反引号()包裹别名,或者直接省略引号(因为row_number`不是MySQL关键字):

WITH temp_user AS (
SELECT * ,ROW_NUMBER() over (partition by departmentName order by failureTime desc ) as row_number
 from user  )
 SELECT * from temp_user where row_number <= 2

不过这个问题通常不是报错的主因,核心还是版本支持问题。


内容的提问来源于stack exchange,提问作者Ants-double

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:12:47