Rank () в MySQL с использованием CTE - PullRequest
0 голосов
/ 12 октября 2018

Проведя исследование и обнаружив, что MariaDB поддерживает Common Table Expressions (CTE), я попытался ранжировать как таковой, но получил ошибку:

3 ошибки были найдены во время анализа.

  • Псевдоним был ранее найден.(около «позиции» в позиции 183)
  • Ожидается псевдоним.(около "" в позиции 182)
  • Нераспознанное ключевое слово.(около «позиции» в позиции 183)

В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с позицией '(PARTITION BY year ORDER BY sale DESC) ИЗ ПРЕДЕЛ продаж 0, 25' в строке 1

Итак, я 'Я предполагаю, что ошибка только после ранга.Что случилось.Вот мой код.

столбцы таблицы:

employee | year | sale
----------------------

SELECT
employee,
year,
sale,
RANK() OVER (PARTITION BY
                 year
             ORDER BY
                 sale DESC
            ) position
FROM
sales;

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Эквивалент rank() с коррелированным подзапросом:

select s.*,
       (select count(*) + 1
        from sales s2
        where s2.year = s.year and s2.sale > s.sale
       ) as position
from sales s;
0 голосов
/ 12 октября 2018

Если кто-то сталкивается с той же проблемой, знайте, что CTE поддерживаются только с версии 10.2

...