2012-06-04 8 views
9

Jak mogłoby to (Oracle) SQL:Rank funkcja w MySQL z klauzuli 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 

zostać przełożone na MySQL?

This question wydaje się być podobny, ale na końcu zapytania podstawowego nie ma żadnego Kolejności. Czy ma to znaczenie, że jest uporządkowany według pól podziału?

+0

i didnot wiedzieć qracle więc można pokazać yo ur pożądany wynik i przykładowe dane najpierw –

+0

Mogę podać małe wyjaśnienie, to jest coś takiego jak masz kolumnę A i B i zamawiasz przez A, następnie B i podajesz numer pozycji na podstawie B dla każdego członka grupy w A. Jeśli Mam rację. – user1433877

Odpowiedz

16

Według link daliście powinno to wyglądać tak:

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; 

Oto 2 skrzypce, jeden dla Oracle i jeden dla MySQL na przykładzie z linku, który podałeś:

  1. oracle
  2. Mysql
+1

Świetne rozwiązanie partycji według części. Zastanawiam się jednak, czy MySQL kiedykolwiek dotrze do 21 wieku i nadąży za nowoczesnymi funkcjami SQL. –

+2

+1 Nice! Dzięki, działa! Jedyne co zmieniłem to to, że nie napisałem "+ 1" po wyrażeniu (zaczęło się od 2). – user1433877

+0

jeśli szkoda, że ​​nie mogę podać więcej niż jednego, jak ... –