MySQL执行dense_rank开窗函数报expecting EOF ; instead of )错误求助
错误原因排查与解决方案
1. 首要原因:MySQL版本不支持窗口函数
窗口函数(包括dense_rank()、OVER子句等)是MySQL 8.0版本才新增的功能,如果你使用的是MySQL 5.7及更早版本,数据库原生不支持该语法,就会抛出语法解析错误,和你收到的报错提示完全吻合。
你可以执行以下命令查询当前数据库版本确认:
SELECT VERSION();
如果返回的版本号小于8.0,即可确认是版本兼容问题,和用户权限无关。
2. 次要语法修正点
你删除多余逗号后的语法本身还有一个可优化点:rank是MySQL的保留关键字,作为别名时建议用反引号包裹,避免潜在的语法冲突,修正后的完整代码如下:
SELECT date_created, serial_number, dense_rank() OVER (PARTITION BY serial_number ORDER BY date_created DESC) AS `rank` FROM table_A;
3. 关于权限问题的说明
窗口函数的使用不需要单独授权,只要你的账号拥有table_A的SELECT权限就可以正常调用,你遇到的报错属于语法解析层面的错误,不是权限拦截导致的。
4. Workbench未高亮OVER关键字的原因
这是正常现象:如果你的Workbench版本较低,或者连接的数据库实例版本低于8.0,Workbench的语法高亮规则会自动适配低版本MySQL的语法范围,不会识别8.0新增的关键字。
内容的提问来源于stack exchange,提问作者Miquel
相关产品推荐
相关产品推荐

