我需要在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()
,这也给出了同样的问题。
答案 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;