当前位置: 首页 > 面试题库 >

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

柯奕
2023-03-14
问题内容

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

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


问题答案:

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中那样的解析函数(有关更多信息,请参阅文档) 解析函数基于一组行来计算合计值。它们与集合函数的不同之处在于,它们为每个组返回多个行。 是否存在? 问题答案: 不,与MSDB,Oracle,PostgreSQL等其他DBMS相比,它是MySQL的主要不足之一。 我强烈怀疑将来是否会看到MySQL中的窗口函数,尤其是在Oracle收购MySQL之后。 更新04/201

  • 问题内容: 目前,我正在开发中使用mysql 5.7,在生产中使用5.6。每次我在开发中使用group by运行查询时,都会收到类似“错误代码:1055。SELECT列表的表达式#1不在GROUP BY中”的错误。 这是查询。 为了解决这个问题,我使用5.7 ANY_VALUE中的mysql函数,但是主要问题是它在mysql 5.6中不可用 因此,如果我修复开发的sql语句,我将在生产中出现错误。

  • 问题内容: 您好,我正在命令行应用程序上工作,它可以接受命令行参数,例如 我正在寻找可以返回我对选项及其对应值的函数,例如c中的getopt。 问题答案: 那里有很多针对Java的命令行解析器库。 picocli是最近(截至2019年末)具有许多功能和特性的命令行解析器。 一些较老的流行类是commons- cli (相当古老),args4j和JCommander。

  • 问题内容: 我想将其中一列中的数据转换为另一种语言… sql中是否有用于翻译它的函数? 问题答案: 不,没有SQL函数/过程可在Oracle数据库内置的语言之间进行转换。 Oracle Text具有用于多语言索引的功能;但这是用于索引文档而不是翻译它们。 Oracle 12c和更高版本还具有在不同SQL方言之间进行转换的功能;但这不是翻译数据。 如果要转换数据,则需要可以导入数据库或可以从数据库调

  • 本文向大家介绍有没有类似于MySQL中Oracle的trunc(sysdate)的功能?,包括了有没有类似于MySQL中Oracle的trunc(sysdate)的功能?的使用技巧和注意事项,需要的朋友参考一下 是的,您可以用于仅获取MySQL中的日期部分,并且可以用于获取MySQL中的当前日期。 当前日期如下- 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表