CSi*_*iva 8 mysql database row-number
有没有像MySQL中的任何功能dense_rank()
和row_number()
像甲骨文和其他DBMS提供的?
我想在查询中生成一个id,但在MySQL中这些函数不存在.还有其他选择吗?
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()
可能,但是火车残骸;我建议在应用程序层处理该要求。
我们现在有..
select ename, sal, dense_rank() over (order by sal desc)rnk
from emp2 e
order by rnk;
Run Code Online (Sandbox Code Playgroud)