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

MySQL相当于ORACLES rank()

奚卓
2023-03-14
问题内容

Oracle有2个函数-
rank()和density_rank()-我发现它们对某些应用程序非常有用。我现在在mysql中做某事,想知道他们是否有与之等效的东西?


问题答案:

没有直接等效的方法,但是您可以使用一些(效率不高)自联接来伪造它。来自MySQL查询howtos集合的一些示例代码:

SELECT v1.name, v1.votes, COUNT(v2.votes) AS Rank
FROM votes v1
JOIN votes v2 ON v1.votes < v2.votes OR (v1.votes=v2.votes and v1.name = v2.name)
GROUP BY v1.name, v1.votes
ORDER BY v1.votes DESC, v1.name DESC;
+-------+-------+------+
| name  | votes | Rank |
+-------+-------+------+
| Green |    50 |    1 |
| Black |    40 |    2 |
| White |    20 |    3 |
| Brown |    20 |    3 |
| Jones |    15 |    5 |
| Smith |    10 |    6 |
+-------+-------+------+


 类似资料:
  • 问题内容: 我有一行用于SQL Server的代码,它采用的日期列为“ YYYYMMDD”,其中DD为00,并将00转换为01,以便它与datetime一起使用。我希望能够使用MySQL 当前适用于SQL Server的代码: 但是isdate在MySQL中无效,该怎么解决? 问题答案: 您可以尝试使用STR_TO_DATE函数。如果表达式不是日期,时间或日期时间,则返回。

  • 问题内容: 我需要能够生成运行查询,该查询将返回下表中的ID的下一个值: 在Oracle中,你可以在序列上调用NEXTVAL,它为你提供下一个序列(注意:不必在表上进行插入)。 谷歌搜索之后,我发现你可以使用以下查询找到auto_increment的当前值: 问题是我希望每次查询该值时该值都增加。在Oracle中,当你调用nextval时,即使不将行插入表中,序列的值也会增加。 有什么方法可以修改

  • 问题内容: 在mysql中是否有相当于Oracle的rowid? 我想做一个MySQL等效于此查询!!! 我想做的是::my_table没有主键..我正试图删除重复的值并强加一个主键(field1和field2的复合)。 问题答案: 在MySql中,通常使用会话变量来实现功能: 但是您无法在要从子查询中删除的表上进行排序。 UPD :也就是说,您将需要创建一个临时表,将测距子查询插入到该临时表中,

  • 问题内容: 在MySQL中,当您联接来自具有相同名称的不同表中的列时,可以在联接中使用关键字USING。例如,这些查询产生相同的结果: SQL Server中是否有等效的快捷方式? 问题答案: 不,必须使用:

  • 问题内容: 我正在尝试将查询从MySQL移植到SQL SERVER2012。 如何为MySQL的substring_index()编写等效项? MySQL SUBSTRING_INDEX()从给定字符串中返回指定次数的分隔符之前的子字符串。 SUBSTRING_INDEX(str,delim,count) 输出: 问题答案: 尝试基于T-SQL和XQuery()的以下解决方案: T-SQL标量函数

  • 问题内容: 我有这个装饰器: 该代码仅能在linux上执行任何操作,就像在Windows上一样。在Windows中也可以使用此代码的最简单方法是什么? 问题答案: 它不是很漂亮,但是我不得不以跨平台的方式做类似的事情,于是我想到了使用单独的线程。基于信号的系统无法在所有平台上可靠地工作。 此类的使用可以包装在装饰器中,也可以制成上下文处理程序。 YMMV。