9

这个(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?

这个问题似乎很相似,但在基本查询的末尾没有 Order By。另外,按分区字段排序是否重要?

4

1 回答 1

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;

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

  1. 甲骨文
  2. mysql
于 2012-06-04T13:48:20.833 回答