怎麼會這樣(Oracle)的SQL:Rank函數與Order By子句
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。另外,它是由分區的領域排序的嗎?
怎麼會這樣(Oracle)的SQL:Rank函數與Order By子句
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;
這裏有兩個小提琴,一個用於Oracle,一個用於MySQL的基礎上,從你給的鏈接的例子:
針對部分分區的漂亮解決方案。但我不知道MySQL是否會到達21世紀並趕上現代SQL特性。 –
+1不錯!謝謝,它的工作原理!我改變的只是在表達式之後沒有寫「+ 1」(它從2開始)。 – user1433877
如果可惜,我不能給多個像... –
我因此未知道qracle這樣可以告訴你喲你想要的結果和樣本數據第一個 –
我可以給一個小的解釋,就像你有列A和B,你以A然後B排序,並且你給出了基於B的每個A組中的每個成員的排名數字。我是對的。 – user1433877