Resultados de la Consulta de Pedidos

La cláusula ORDER BY controla el orden en el que se devuelven o procesan las filas. Se puede utilizar en cualquier selectionquery, incluyendo un operando de INSERT o UPSERT, así como con sentencias DELETE y UPDATE.

Sinopsis

ORDERBYa_exprASCDESCNULLSFIRSTLASTPRIMARYKEYtable_nameINDEXtable_name@index_nameASCDESC,

Parámetros

La cláusula ORDER BY toma una lista de especificaciones de pedido separadas por comas.Cada especificación de pedido se compone de una selección de columnas seguida opcionalmente por la palabra clave ASC o DESC.

Cada selección de columna puede tomar una de las siguientes formas:

  • Una selección de columna simple, determinada de la siguiente manera:
    1. El nombre de una etiqueta de columna configurada con AS anteriormente en la cláusula SELECT. Utiliza el valor calculado por la cláusula SELECT como clave de ordenación.
    2. Un número entero positivo, que designa una de las columnas de la fuente de datos, ya sea la cláusula FROM de la cláusula SELECT donde sucede o la tabla en la que se escribe DELETE o UPDATE. Utiliza el valor de entrada correspondiente de la fuente de datos para usarlo como clave de ordenación.
    3. Una expresión escalar arbitraria. Utiliza el resultado de evaluar esa expresión como clave de ordenación.
  • La notación PRIMARY KEY <table_name>. Utiliza la(s) columna (s) de clave primaria de la tabla dada como clave de ordenación. Esta tabla debe formar parte de la fuente de datos.
  • La notación INDEX <table_name>@<index_name>. Utiliza las columnas indexadas por el índice dado como clave de ordenación. Esta tabla debe formar parte de la fuente de datos.

La palabra clave opcional ASC después de una selección de columna indica que debe usarse la clave de clasificación tal cual, y por lo tanto no tiene sentido.

La palabra clave opcional DESC invierte la dirección de las columnas seleccionadas por la selección que precede inmediatamente.

CockroachDB admite cláusulas NULLS FIRST / NULLS LAST en ORDER BY para compatibilidad con la sintaxis de clasificación de filas de PostgreSQL.

Nota:

El soporte para NULLS LAST es actualmente solo de sintaxis. Si especifica NULLS LAST en una cláusula ORDER BY, CockroachDB usa NULLS FIRST y no devuelve un error.

Preservación de pedidos

En general, el orden de los resultados intermedios de una consulta no está garantizado,incluso si se especifica ORDER BY. En otras palabras, la cláusula ORDER BY solo es efectiva en la instrucción de nivel superior. Por ejemplo, es ignorado por el queryplanner cuando está presente en una sub-consulta en una cláusula FROM de la siguiente manera:

icono/botones / copia
> SELECT * FROM a, b ORDER BY a.x; -- valid, effective> SELECT * FROM (SELECT * FROM a ORDER BY a.x), b; -- ignored, ineffective

Sin embargo,al combinar consultas junto consub-consultas, algunas combinaciones harán que la cláusula ORDER BY en una sub-consulta signifique:

  1. El orden del operando de una cláusula WITH ORDINALITY (dentro del operando FROM de una cláusula SELECT) se conserva,para controlar la numeración de las filas.
  2. Se conserva el orden del operando de una cláusula independiente LIMIT o OFFSET (con un operando FROM de una cláusula SELECT), para determinar qué filas se mantienen en el resultado.
  3. Se conserva el orden de la fuente de datos para una instrucción INSERTo una instrucción UPSERT que también usaLIMIT, para determinar qué filas se procesan, pero no su orden.
  4. El pedido indicado para una instrucción UPDATE o DELETE que también utiliza LIMIT se utiliza para determinar qué filas se procesan, pero no su pedido.(Esta es una extensión cucaracha DB.)
  5. Se conserva el orden de una sub-consulta utilizada en una expresión escalar.

Por ejemplo, utilizando WITH ORDINALITY:

icono/botones / copia
> SELECT * FROM (SELECT * FROM a ORDER BY a.x) WITH ORDINALITY; -- ensures that the rows are numbered in the order of column a.x.

Por ejemplo, usar una cláusula LIMIT independiente en FROM:

icono / botones / copiar

Por ejemplo, utilizando una sub-consulta en contexto escalar:

icono/botones / copiar

Orden de filas sin ORDEN POR

Sin ORDER BY, las filas se procesan o devuelven en orden no determinista. «No determinista» significa que el orden real puede depender del plan lógico, el orden de los datos en el disco, la topología del clúster Cucaracha DB, y generalmente es variable con el tiempo.

Ordenar mediante selecciones simples de columnas

Teniendo en cuenta la siguiente tabla:

icono / botones / copia
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);

Las siguientes instrucciones son equivalentes:

icono / botones / copia
+---------+| a |+---------+| 1 || 2 || 3 |+---------+(3 rows)

Tenga en cuenta que el orden de las reglas importa. Si hay ambigüedad ,la prioridad AS aliasestake sobre las columnas de origen de datos, por ejemplo:

icono / botones / copia

También es posible ordenar usando una expresión escalar arbitraria calculada para cada fila, por ejemplo:

icono/botones / copia
> SELECT a, b FROM ab ORDER BY a + b; -- orders by the result of computing a+b.

Clasificación mediante múltiples columnas

Cuando se da más de una especificación de pedido, las especificaciones posteriores se utilizan para ordenar filas que son iguales a las especificaciones anteriores, por ejemplo:

icono / botones / copia
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b, a;

Esto ordena los resultados por columna b, y luego si hay múltiplos que tienen el mismo valor en columna b, ordenará los múltiplos por columna a.

Invertir el orden de clasificación

La palabra clave DESC («descendente») se puede agregar después de una especificación de pedido para invertir su orden. Esto se puede especificar por separado para cada especificación, por ejemplo:

icono / botones / copia
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b DESC, a; -- sorts on b descending, then a ascending.

Ordenar en orden de clave primaria

La notación ORDER BY PRIMARY KEY garantiza que los resultados se representen en orden de clave primaria.

La ventaja particular es que para las consultas que utilizan el índice principal, esto garantiza el orden al tiempo que garantiza que no habrá un cálculo de clasificación adicional para lograrlo, por ejemplo:

icono / botones / copia
> CREATE TABLE kv(k INT PRIMARY KEY, v INT);> SELECT k, v FROM kv ORDER BY PRIMARY KEY kv; -- guarantees ordering by column k.

Si una clave primaria ya usa la palabra clave DESC, entonces su significado se volteará (cancelará) si la cláusula ORDER BY también usaDESC, por ejemplo:

icono/botones/copia

Ordenar en orden de índice

La notación ORDER BY INDEX garantiza que los resultados se presenten en el orden de un índice dado.

La ventaja particular es que para las consultas que usan ese índice, esto garantiza el orden al tiempo que garantiza que no habrá un cómputo de clasificación adicional para lograrlo, por ejemplo:

icono / botones / copia
> CREATE TABLE kv(k INT PRIMARY KEY, v INT, INDEX v_idx(v));> SELECT k, v FROM kv ORDER BY INDEX kv@v_idx; -- guarantees ordering by column v.

Si un índice ya utiliza la palabra clave DESC, su significado se invertirá (cancelará) si la cláusula ORDER BY también utilizaDESC, por ejemplo:

icono / botones / copia

Ordenar filas en instrucciones DML

Al usar ORDER BY con una INSERT,UPSERT, UPDATE oDELETE (p. ej., una instrucción DML), la cláusula ORDER BY está firmada si no se utiliza en combinación con LIMIT y/oOFFSET.

La combinación de ORDER BY y LIMIT/OFFSET determina qué filas de la entrada se utilizan para insertar, actualizar o eliminar los datos de tabla, pero no determina en qué orden se sitúa la mutación.

Por ejemplo, usando LIMIT en INSERT:

icono/botones / copia
> INSERT INTO a SELECT * FROM b ORDER BY b.x LIMIT 1; -- ensures that only the first row of b in the order of column b.x -- is inserted into a.

La razón por la que ORDER BY no controla el orden final de las filas en la tabla es que el orden de las filas en la tabla de destino está determinado por sus índices primario y secundario.

Para ordenar el resultado de la cláusula RETURNING, consulte Ordenar la salida de eliminaciones.

Ordenar la salida de elimina

Para ordenar la salida de una instrucción DELETE, use:

icono / botones / copiar
> WITH a AS (DELETE ... RETURNING ...) SELECT ... FROM a ORDER BY ...

Para ver un ejemplo, consulte Ordenar y devolver filas eliminadas.

Véase también

  • Consultas de Selección
  • las Expresiones Escalares
  • INSERT
  • UPSERT
  • DELETE
  • UPDATE

esta página Fue útil?

No

Deja una respuesta

Tu dirección de correo electrónico no será publicada.