SQL ROW_NUMBER给出了错误

时间:2015-01-24 18:59:02

标签: mysql sql sql-order-by rank row-number

我需要在MySQL中订购行,并根据该顺序为每行分配一个数字。 ORDER BY按预期工作,但不是ROW_NUMBER()

这有效:

USE my_database;
SELECT
    id
    ,volume
    FROM my_table
    ORDER BY volume;

这不起作用:

USE my_database;
SELECT
    id
    ,volume
    ,ROW_NUMBER() over(ORDER BY volume)
    FROM my_table
    ORDER BY volume;

我收到此错误消息:

  

SELECT id,volume,ROW_NUMBER()over(ORDER BY volume)FROM my_table ORDER BY volume错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便使用接近'(ORDER BY卷)FROM my_table ORDER BY vol'在第4行0.000秒

我做错了什么以及如何让它发挥作用?

我还尝试了RANK()DENSE_RANK(),这也给出了同样的问题。

2 个答案:

答案 0 :(得分:1)

MySQL中没有ROW_NUMBER()RANK()这样的东西。请尝试以下方法:

USE my_database;
SET @row_number = 0; 
SELECT id
     , volume
     , @row_number := @row_number + 1 AS rank
FROM my_table
ORDER BY volume;

答案 1 :(得分:0)

MySQL中不存在函数ROW_NUMBER()。

但是,您可以复制它,可能是:http://www.mysqltutorial.org/mysql-row_number/

  

row_number是一个返回序号的排名函数   一行,从第一行的1开始。我们经常想用   row_number函数用于生成我们需要的特定报告。   不幸的是,MySQL不提供类似Microsoft SQL的row_number   服务器和Oracle。但是,在MySQL中,您可以使用会话变量   模拟row_number函数。

示例:

SET @row_number = 0;

SELECT 
    (@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
    employees
LIMIT 5;