一尘不染

MySQL中是否有任何功能,如Oracle的density_rank()和row_number()?

mysql

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

我想在查询中生成一个ID,但是在MySQL中这些功能不存在。还有其他选择吗?


阅读 189

收藏
2020-05-17

共1个答案

一尘不染

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

(@row := ifnull(@row, 0) + 1)

像这样:

select *, (@row := ifnull(@row, 0) + 1) row_number
from mytable
order by id

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

set @row := 0;
select *, (@row := @row + 1) row_number
from mytable
order by 1;

参见SQLFiddle

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

2020-05-17