使用Order By子句在MySQL中对Rank函数进行排序

use*_*877 9 mysql oracle 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
Run Code Online (Sandbox Code Playgroud)

被翻译成MySQL?

这个问题看起来很相似,但在基本查询的最后没有Order By.此外,它是否由分区字段排序?

A.B*_*ade 16

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

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;
Run Code Online (Sandbox Code Playgroud)

这里有2个小提琴,一个用于oracle,一个用于mySql,基于你给出的链接中的示例:

  1. 神谕
  2. Mysql的

  • +1很好!谢谢,它的确有效!我改变的只是我在表达式之后没有写"+ 1"(它从2开始). (2认同)