MySQL中有没有像fat_rank()和row_number()这样的函数?

CSi*_*iva 8 mysql database row-number

有没有像MySQL中的任何功能dense_rank()row_number()像甲骨文和其他DBMS提供的?

我想在查询中生成一个id,但在MySQL中这些函数不存在.还有其他选择吗?

Boh*_*ian 5

Mysql没有它们,但是您可以row_number()使用使用用户定义的变量的以下表达式进行模拟:

(@row := ifnull(@row, 0) + 1)
Run Code Online (Sandbox Code Playgroud)

像这样:

select *, (@row := ifnull(@row, 0) + 1) row_number
from mytable
order by id
Run Code Online (Sandbox Code Playgroud)

但是如果您要重用该会话,@row它将仍然被设置,因此您需要像这样重置它:

set @row := 0;
select *, (@row := @row + 1) row_number
from mytable
order by 1;
Run Code Online (Sandbox Code Playgroud)

参见SQLFiddle

dense_rank()可能,但是火车残骸;我建议在应用程序层处理该要求。


Rav*_*i R 5

我们现在有..

select ename, sal, dense_rank() over (order by sal desc)rnk
from emp2 e
order by rnk;
Run Code Online (Sandbox Code Playgroud)