首页 > 解决方案 > MySQL 抛出错误 1064,似乎无法识别 OVER 命令

问题描述

我的查询是:

SELECT *,
ROW_NUMBER() OVER (ORDER BY score ASC)
FROM submissions

我收到的错误信息是:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '(ORDER BY score ASC) FROM submits LIMIT 0, 25' 附近使用正确的语法

我在 phpMyAdmin 中运行此查询。我注意到 OVER 不是蓝色的,在我输入时也没有提示,这与其他命令词(ORDER、ASC 等)不同。

这个更简单的查询运行得很好:

SELECT * FROM submissions

我尝试将事物放在引号中,改用 RANK 函数,并摆弄空格,但查询仍然没有运行。这里有什么问题?

标签: mysqlphpmyadmin

解决方案


我的猜测是您运行的 MySQL 版本早于 8+,不支持ROW_NUMBER. ROW_NUMBER在早期版本的 MySQL中有一些模拟选项。一种是使用用户变量:

SELECT *,
    (@row_number:=@row_number + 1) AS rn
FROM submissions, (SELECT @row_number := 0) tmp
ORDER BY score;

推荐阅读