MySQL中带有Order By子句的排名函数

问题描述 投票:9回答:1

这怎么可能(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。另外,由分区的字段排序是否重要?

mysql oracle window-functions rank
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. oracle
  2. Mysql
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.