2011-09-20 14 views
29

Quiero ordenar por propiedad TODOS los datos en mi db y SÓLO DESPUÉS de usar LIMIT y OFFSET.SQL (ORACLE): ORDER BY y LIMIT

consulta como esta:

SELECT select_list 
    FROM table_expression 
    [ ORDER BY ... ] 
    [ LIMIT { number | ALL } ] [ OFFSET number ] 

sé la clasificación termina tan pronto como ha dictaminado en las primeras filas de ROW_COUNT el resultado ordenada. ¿Puedo ordenar todos los datos antes de llamar a LIMIT y OFFSET?

+0

relacionados: http://stackoverflow.com/q/470542/1461424 – Krumia

Respuesta

54

Antes de 12.1, Oracle no admite las palabras clave LIMIT o OFFSET. Si desea recuperar filas N a M de un conjunto de resultados, lo que se necesita algo como:

SELECT a.* 
    FROM (SELECT b.*, 
       rownum b_rownum 
      FROM (SELECT c.* 
        FROM some_table c 
       ORDER BY some_column) b 
     WHERE rownum <= <<upper limit>>) a 
WHERE b_rownum >= <<lower limit>> 

o el uso de funciones analíticas:

SELECT a.* 
    FROM (SELECT b.*, 
       rank() over (order by some_column) rnk 
      FROM some_table) 
WHERE rnk BETWEEN <<lower limit>> AND <<upper limit>> 
ORDER BY some_column 

Cualquiera de estos enfoques tipo le dará filas N a través de M del resultado ordenado.

En 12.1 y posterior, puede utilizar los OFFSET y/o operadores FETCH [FIRST | NEXT]:

SELECT * 
    FROM some_table 
ORDER BY some_column 
OFFSET <<lower limit>> ROWS 
    FETCH NEXT <<page size>> ROWS ONLY 
+2

Tal vez no se contesta con la misma facilidad, ya que es preguntó: ¿Cuál de estos enfoques es probablemente mejor para tablas muy grandes (1-10 millones de filas)? Tal vez se trata de una selección de 3 de profundidad vs 2 de profundidad con rango()? En realidad, supongo que probaré los dos y lo veré. –

+7

Para cualquiera que se lo esté preguntando, descubrí que el primer enfoque fue más rápido para mí en varios ms, con el segundo enfoque en varios segundos. No estoy seguro de si es la función en sí la que agrega tiempo o si impide cualquier optimización de consultas. ¡Gracias por mostrar múltiples enfoques de todos modos! –

Cuestiones relacionadas