2012-06-04 4 views
9

Come potrebbe questo (Oracle) SQL:funzione Classifica in MySQL con clausola 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 

essere tradotto in MySQL?

This question sembra essere simile ma non esiste un ordine entro alla fine della query di base. Inoltre, importa che sia ordinato dai campi di partizione?

+0

i didnot sapere qracle modo da poter mostrare yo il risultato desiderato ei dati di esempio prima –

+0

Posso dare una piccola spiegazione, è qualcosa come hai le colonne A e B e ordini da A poi B e dai un numero di rango basato su B per ogni membro di gruppi in A. Se Ho ragione – user1433877

risposta

16

Secondo il link che hai dato che dovrebbe apparire come questo:

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; 

Qui ci sono 2 violini, uno per Oracle e uno per MySQL sull'esempio dal link che hai dato:

  1. oracle
  2. Mysql
+1

Nifty soluzione per la partizione di parte. Ma mi chiedo se MySQL arriverà mai nel 21 ° secolo e recupererà le moderne funzionalità SQL. –

+2

+1 Bello! Grazie, funziona! L'unica cosa che ho cambiato è che non ho scritto "+ 1" dopo l'espressione (è iniziato da 2 allora). – user1433877

+0

se un peccato che non posso dare più di uno come ... –