使用CTE在MySQL中的Rank()

时间:2018-10-12 19:01:15

标签: mysql sql mariadb ranking

在进行研究并发现MariaDB支持通用表表达式(CTE)之后,我试图进行这样的排名,但出现错误:

在分析过程中发现

3个错误。

  • 先前已找到别名。 (在位置183的“位置”附近)
  • 需要别名。 (在位置182处的“”附近)
  • 无法识别的关键字。 (在位置183的“位置”附近)
  

您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第1行的'(PARTITION BY year ORDER BY sale DESC)位置FROM sales LIMIT 0,25'附近使用

因此,我猜该错误仅次于排名。怎么了。这是我的代码。

表列是

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


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

2 个答案:

答案 0 :(得分:0)

如果有人遇到相同的问题,请知道仅从10.2版开始支持CTE

答案 1 :(得分:0)

具有相关子查询的rank()等效项是:

select s.*,
       (select count(*) + 1
        from sales s2
        where s2.year = s.year and s2.sale > s.sale
       ) as position
from sales s;