MySQL中有没有像Oracle这样的函数,比如dense_rank()和row_number()?

MySQL中有没有像Oracle这样的函数,比如dense_rank()和row_number()?,mysql,database,row-number,Mysql,Database,Row Number,MySQL中是否有类似Oracle和其他DBMS提供的densite\u rank()和row\u number()之类的函数 我想在查询中生成一个id,但在MySQL中没有这些函数。有其他选择吗?在MySql中,您没有像Oracle中那样的densite\u rank()或row\u number() 但您可以通过SQLquery创建相同的功能: 这里有一篇文章也是这样做的: Mysql没有它们,但是您可以使用以下使用用户定义变量的表达式来模拟row\u number(): (@row :=

MySQL中是否有类似Oracle和其他DBMS提供的
densite\u rank()
row\u number()
之类的函数


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

MySql
中,您没有像
Oracle
中那样的
densite\u rank()
row\u number()

但您可以通过
SQL
query创建相同的功能:

这里有一篇文章也是这样做的:




Mysql没有它们,但是您可以使用以下使用用户定义变量的表达式来模拟
row\u 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;


密集等级()
是可能的,但火车失事了;我建议在应用层处理该要求

MySQL不支持这些函数,但您可以自己模拟它们。厚颜无耻地链接到我的解决方案,我们现在有了

select ename, sal, dense_rank() over (order by sal desc)rnk
from emp2 e
order by rnk;
MySQL 8.0版中提供了
densite\u RANK()
函数。因此,如果您使用的是MySQL 8.0版,则可以运行此命令

SELECT name, DENSE_RANK() OVER ( ORDER BY value ) my_rank FROM table_name;

MySQL版本8现在有了行号。

例如:

SELECT 
    ROW_NUMBER() OVER (ORDER BY s.Id) AS 'row_num', 
    s.product,
    s.title
FROM supplies AS S

答案很简单:不,你必须使用用户定义的变量并在查询中手动计算如何在查询中手动计算你能告诉我我是mysql@MKhalidJunaidRownum的新手吗:但是数字一直在增加我执行查询的次数。@CSiva有关如何克服“不断增加的行数”的问题,请参阅编辑问题。非常感谢@Bohemian你的回答帮了我很大的忙。我不知道为什么有人对此投了反对票。现在这应该是正确的答案。