mysql - MySQL 中带有 Order By 子句的 Rank 函数

标签 mysql oracle window-functions rank

这个 (Oracle) SQL 怎么可能:

select a.*, rank() over (partition by a.field1 order by a.field2 desc) field_rank
from table_a a
order by a.field1, a.field2

被翻译成MySQL?

This question看起来很相似,但基本查询的末尾没有 Order By。另外,按分区字段排序是否重要?

最佳答案

根据您提供的链接,它应该如下所示:

SELECT    a.*,
( 
            CASE a.field1 
            WHEN @curType 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curType := a.field1 END
          ) + 1 AS rank
FROM      table_a a,
          (SELECT @curRow := 0, @curType := '') r
ORDER BY  a.field1, a.field2 desc;

根据您提供的链接中的示例,这里有 2 个 fiddle ,一个用于 oracle,一个用于 mySql:

  1. oracle
  2. Mysql

关于mysql - MySQL 中带有 Order By 子句的 Rank 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10881990/

相关文章:

oracle - 表不存在则创建,创建后进入一行

mysql - 提取具有最大值的行

sql - 使用子查询和 'where in' 返回多列

mysql - 试图从数据库返回行号的语法错误

mysql - 如何获取mysql中每个用户的最新消息?

mysql - WordPress - 页面中的动态内容

php - 在设计期间测量 MySQL 数据库性能

sql - 选择从查询中检索列名的列

apache-spark - 规范化大型 PySpark 数据帧时,CodeGen 增长超过 64 KB 错误

php - 将变量传递给 mysql 语句