首页 > 解决方案 > MySQL 语法中 OVER 和 PARTITION 的语法错误

问题描述

SELECT Id, Price, CustomerId, ROW_NUMBER() OVER (PARTITION BY CustomerId)
FROM Orders;

我收到错误“语法错误:意外的'('(左括号)

MySQL不支持这个吗?我很确定我以前做过这个,从我在谷歌上看到的应该可以。

mysql -V
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper

标签: mysqlsqlsubquerywindow-functionsmysql-5.7

解决方案


窗口函数仅在 MySQL 8.0 中可用。

在早期版本中,您可以使用子查询 - 但是,您的代码缺少一个ORDER BY子句,这使得排序不一致。假设您想按 id 对同一客户的订单进行排序,您可以将其表述为:

SELECT Id, Price, CustomerId, 
    (SELECT COUNT(*) FROM Orders o1 WHERE o1.CustomerId = o.CustomerId and o1.Id <= o.Id) AS rn
FROM Orders o;

推荐阅读