Мое решение LeetCode SQL вопрос № 1174. Немедленная доставка еды II с функцией CTE и Window всегда показывает синтаксическую ошибку - PullRequest
0 голосов
/ 03 марта 2020

Ссылка на этот вопрос здесь: https://leetcode.com/problems/immediate-food-delivery-ii/

Мое решение следующее, с 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, на предмет правильного синтаксиса, который можно использовать рядом со значением 'rank as (выберите customer_id, order_date, customer_pref_delivery_date, rank () ove') в строке 3

1 Ответ

1 голос
/ 04 марта 2020

Для oracle ошибка; Вы должны удалить «AS» перед first_orders . Потому что "AS" не может идти после ключевого слова "FROM".

    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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...