Compartir a través de


Cláusula ORDER BY

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Devuelve las filas de resultados de forma ordenada en el orden especificado por el usuario. A diferencia de la cláusula SORT BY, esta cláusula garantiza un orden total en la salida.

Sintaxis

ORDER BY { { ALL [ sort_direction] [ nulls_sort_oder ] } |
           { expression [ sort_direction ] [ nulls_sort_oder ] } [, ...] }

sort_direction
  [ ASC | DESC ]

nulls_sort_order
  [ NULLS FIRST | NULLS LAST ]

Parámetros

  • ALL

    Se aplica acasilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 12.2 LTS y versiones posteriores

    Una abreviatura equivalente a especificar todas las expresiones de la lista SELECT en el orden en que se producen. Si se especifican sort_direction o nulls_sort_order, se aplican a cada expresión.

  • expression

    Expresión de cualquier tipo que se usa para establecer un orden en el que se devuelven los resultados.

    Si la expresión es un valor literal INTEGER , se interpreta como una posición de columna en la lista de selección.

    Si un valor de INTEGER literal hace referencia a una posición que está fuera del intervalo, Azure Databricks genera ORDER_BY_POS_OUT_OF_RANGE.

  • sort_direction

    Especifica el criterio de ordenación para el orden por expresión.

    • ASC: la dirección de ordenación de esta expresión es ascendente.
    • DESC: el criterio de ordenación de esta expresión es descendente.

    Si no se especifica explícitamente la dirección de ordenación de las filas, el orden es ascendente de manera predeterminada.

  • nulls_sort_order

    También puede especificar si se devuelven valores NULL antes o después de valores distintos de NULL. Si no se especifica null_sort_order, los valores NULL se ordenan primero si el criterio de ordenación es ASC; si el criterio de ordenación es DESC, se ordenan al final.

    • NULLS FIRST: los valores NULL se devuelven primero independientemente del criterio de ordenación.
    • NULLS LAST: los valores NULL se devuelven primero independientemente del criterio de ordenación.

Si la expresión tiene un tipo de datos que no admite la ordenación, como MAP, Azure Databricks genera DATATYPE_MISMATCH. INVALID_ORDERING_TYPE.

Cuando se especifica más de una expresión, se ordena de izquierda a derecha. Todas las filas se ordenan a partir de la primera expresión. Si hay valores duplicados para la primera expresión, la segunda expresión se usa para resolver el orden dentro del grupo de duplicados, y así sucesivamente. El orden resultante no es determinista si hay valores duplicados en todas las expresiones de orden.

Condiciones de error comunes

Ejemplos

> CREATE TABLE person (id INT, name STRING, age INT);
> INSERT INTO person VALUES
    (100, 'John' , 30),
    (200, 'Mary' , NULL),
    (300, 'Mike' , 80),
    (400, 'Jerry', NULL),
    (500, 'Dan'  ,  50);

-- Sort rows by age. By default rows are sorted in ascending manner with NULL FIRST.
> SELECT name, age FROM person ORDER BY age;
 Jerry NULL
  Mary NULL
  John   30
   Dan   50
  Mike   80

-- Sort rows in ascending manner keeping null values to be last.
> SELECT name, age FROM person ORDER BY age NULLS LAST;
  John   30
   Dan   50
  Mike   80
  Mary NULL
 Jerry NULL

-- Sort rows by age in descending manner, which defaults to NULL LAST.
> SELECT name, age FROM person ORDER BY age DESC;
  Mike   80
   Dan   50
  John   30
 Jerry NULL
  Mary NULL

-- Sort rows in ascending manner keeping null values to be first.
> SELECT name, age FROM person ORDER BY age DESC NULLS FIRST;
 Jerry NULL
  Mary NULL
  Mike   80
   Dan   50
  John   30

-- Sort rows based on more than one column with each column having different
-- sort direction.
> SELECT * FROM person ORDER BY name ASC, age DESC;
 500    Dan   50
 400  Jerry NULL
 100   John   30
 200   Mary NULL
 300   Mike   80

-- Sort rows based on all columns in the select list
> SELECT * FROM person ORDER BY ALL ASC;
 100   John   30
 200   Mary NULL
 300   Mike   80
 400  Jerry NULL
 500    Dan   50

-- Positional reference out of range.
> SELECT name FROM person ORDER BY 2;
  Error: ORDER_BY_POS_OUT_OF_RANGE

-- Ordering by a type that does not support ordering.
> SELECT map('a', 1) AS m ORDER BY 1;
  Error: DATATYPE_MISMATCH