MySQL 8.0.1使用RANK、OVER等窗口函数报1064语法错误如何解决
报错排查与解决方案
根因说明
你使用的MySQL 8.0.1属于开发里程碑版本(DMR,非正式GA版本),独立WINDOW子句的语法支持是从MySQL 8.0.2版本才正式上线的,8.0.1仅支持将窗口规则直接写在OVER关键字后的内联写法,不支持在SELECT语句末尾单独定义窗口别名,因此触发语法报错。
两种解决方式
- 方案一:修改SQL语句,将窗口定义内联到
OVER后,无需单独声明WINDOW子句,可直接在8.0.1版本运行,修改后的语句如下:
WITH daily_shipping_summary AS ( SELECT ship_date, SUM(shipping_cost) AS daily_total FROM market_fact_full AS m INNER JOIN shipping_dimen AS s ON s.ship_id = m.ship_id GROUP BY ship_date ) SELECT *, SUM(daily_total) OVER (ORDER BY daily_total ROWS UNBOUNDED PRECEDING) AS running_total, AVG(daily_total) OVER (ORDER BY daily_total ROWS 6 PRECEDING) AS moving_avg FROM daily_shipping_summary
- 方案二:将MySQL服务升级到8.0.2及以上的正式GA版本,无需修改原有SQL语句即可直接运行。
版本验证方式
可执行命令SELECT VERSION();查看当前MySQL的实际版本号,确认是否支持独立WINDOW子句语法。
内容的提问来源于stack exchange,提问作者blackhole
相关产品推荐
相关产品推荐

