Mysql 我对leetcodesql问题1174的解决方案。带有CTE和窗口功能的即时食品配送II始终显示语法错误

Mysql 我对leetcodesql问题1174的解决方案。带有CTE和窗口功能的即时食品配送II始终显示语法错误,mysql,sql,oracle,Mysql,Sql,Oracle,此问题的链接如下: 我的解决方案如下,带有CTE和窗口功能。我尝试了mysql和oracle,但都不起作用,而且都显示出语法错误。不知道为什么 with rank as ( select customer_id, order_date, customer_pref_delivery_date, rank() over (partition by customer_id order by order_date asc) as

此问题的链接如下:

我的解决方案如下,带有CTE和窗口功能。我尝试了mysql和oracle,但都不起作用,而且都显示出语法错误。不知道为什么

with rank as
(
    select
        customer_id,
        order_date,
        customer_pref_delivery_date,
        rank() over (partition by customer_id order by order_date asc) as rnk
    from 
        delivery
)
select 
    round(avg(f),2) as immediate_percentage
from
    (select
         case 
            when order_date = customer_pref_delivery_date 
            then 1 else 0 
         end as f
     from 
         rank
     where 
         rnk = 1) as first_orders;
Oracle错误:

错误:ORA-00933:SQL命令未正确结束

Mysql错误:

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near'rank as的正确语法 (选择 客户识别码, 订单日期:, 客户优先交货日期, 第3行的秩()大于'


对于oracle错误,您必须删除第一批订单之前的“AS”,因为“AS”不能位于“FROM”关键字之后


您得到的错误是什么?您好,上面写着“ORA-00933:SQL命令未正确结束”在Oracle中。我在问题中粘贴了一个在MySQL中的长版本。Oracle不支持将
用作表别名。MySQL最近才添加了对窗口函数的支持,您可能正在使用过时的版本。我在Oracle中删除了列别名,这很有效!谢谢!
    SELECT ROUND (AVG (F), 2) AS IMMEDIATE_PERCENTAGE
  FROM (SELECT CASE
                  WHEN ORDER_DATE = CUSTOMER_PREF_DELIVERY_DATE THEN 1
                  ELSE 0
               END
                  AS F
          FROM RANK
         WHERE RNK = 1) FIRST_ORDERS;