有没有像MySQL中的任何功能dense_rank()和row_number()像甲骨文和其他DBMS提供的?
dense_rank()
row_number()
我想在查询中生成一个ID,但是在MySQL中这些功能不存在。还有其他选择吗?
Mysql没有它们,但是您可以row_number()使用使用用户定义的变量的以下表达式进行模拟:
(@row := ifnull(@row, 0) + 1)
像这样:
select *, (@row := ifnull(@row, 0) + 1) row_number from mytable order by id
但是如果您要重用该会话,@row它将仍然被设置,因此您需要像这样重置它:
@row
set @row := 0; select *, (@row := @row + 1) row_number from mytable order by 1;
参见SQLFiddle。
dense_rank()可能,但是火车残骸;我建议在应用程序层处理该要求。