MySQL 中是否有类似 Oracle 的 dense_rank() 和 row_number() 之类的函数?
Are there any functions in MySQL like dense_rank() and row_number() like Oracle?
MySQL 中是否有像 dense_rank()
和 row_number()
类似 Oracle 和其他 DBMS 提供的功能?
我想在查询中生成一个 id,但在 MySQL 中没有这些函数。有其他选择吗?
在 MySql
中你没有 dense_rank()
或 row_number()
像 Oracle
中的那样。
但您可以通过 SQL
查询创建相同的功能:
这是一篇做同样事情的文章:
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()
是可能的,但火车失事;我建议在应用程序层处理该要求。
MySQL不支持这些功能,但你可以自己模仿。无耻地link我的解决方案ROW_NUMBER, RANK and DENSE_RANK functions in MySQL
我们现在..
select ename, sal, dense_rank() over (order by sal desc)rnk
from emp2 e
order by rnk;
DENSE_RANK()
函数在 MySQL 版本 8.0 中可用。因此,如果您使用的是 MySQL 8.0 版,则可以 运行 此命令,
SELECT name, DENSE_RANK() OVER ( ORDER BY value ) my_rank FROM table_name;
MySQL 版本 8 现在有 ROW_NUMBER。
Documentation
示例:
SELECT
ROW_NUMBER() OVER (ORDER BY s.Id) AS 'row_num',
s.product,
s.title
FROM supplies AS S
MySQL 中是否有像 dense_rank()
和 row_number()
类似 Oracle 和其他 DBMS 提供的功能?
我想在查询中生成一个 id,但在 MySQL 中没有这些函数。有其他选择吗?
在 MySql
中你没有 dense_rank()
或 row_number()
像 Oracle
中的那样。
但您可以通过 SQL
查询创建相同的功能:
这是一篇做同样事情的文章:
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()
是可能的,但火车失事;我建议在应用程序层处理该要求。
MySQL不支持这些功能,但你可以自己模仿。无耻地link我的解决方案ROW_NUMBER, RANK and DENSE_RANK functions in MySQL
我们现在..
select ename, sal, dense_rank() over (order by sal desc)rnk
from emp2 e
order by rnk;
DENSE_RANK()
函数在 MySQL 版本 8.0 中可用。因此,如果您使用的是 MySQL 8.0 版,则可以 运行 此命令,
SELECT name, DENSE_RANK() OVER ( ORDER BY value ) my_rank FROM table_name;
MySQL 版本 8 现在有 ROW_NUMBER。 Documentation
示例:
SELECT
ROW_NUMBER() OVER (ORDER BY s.Id) AS 'row_num',
s.product,
s.title
FROM supplies AS S