2012-06-04 8 views
9

¿Cómo podría este (Oracle) SQL:función Rango de MySQL con cláusula 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 

traducirse en MySQL?

This question parece ser similar pero no hay Order By en el final de la consulta base. Además, ¿importa que esté ordenado por los campos de partición?

+0

i nose saber qracle por lo que puede mostrar yo El resultado deseado y los datos de muestra primero –

+0

Puedo dar una pequeña explicación, es algo así como que tiene la columna A y B y ordena por A a B y da un número de clasificación basado en B para cada miembro de los grupos en A. Si Estoy en lo correcto. – user1433877

Respuesta

16

De acuerdo con el enlace que dio debería tener este aspecto:

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; 

Aquí hay 2 violines, una para Oracle y uno para MySQL basado en el ejemplo desde el enlace que diste:

  1. oracle
  2. Mysql
+1

Solución ingeniosa para la partición por pieza. Pero me pregunto si MySQL alguna vez llegará en el siglo XXI y se pondrá al día con las características SQL modernas. –

+2

+1 ¡Agradable! Gracias, funciona! Lo único que cambié fue que no escribí "+ 1" después de la expresión (comenzó a partir de 2). – user1433877

+0

si es una lástima que no puedo dar más de uno como ... –