ORDER BY klauzula

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Zwraca wiersze wyników w sposób posortowany w określonej kolejności użytkownika. W przeciwieństwie do klauzuli SORT BY klauzula ta gwarantuje łączną kolejność w danych wyjściowych.

Składnia

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 ]

Parametry

  • ALL

    Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 12.2 LTS i nowsze

    Skrót odpowiadający określeniu wszystkich wyrażeń na liście SELECT w kolejności ich wystąpienia. Jeśli sort_direction lub nulls_sort_order są określone, mają zastosowanie do każdego wyrażenia.

  • wyrażenie

    Wyrażenie dowolnego typu używane do ustanowienia kolejności, w której są zwracane wyniki.

    Jeśli wyrażenie jest wartością literału INTEGER , jest interpretowana jako pozycja kolumny na liście wyboru.

    Jeśli wartość literału INTEGER odnosi się do pozycji, która jest poza zakresem, Azure Databricks podnosi ORDER_BY_POS_OUT_OF_RANGE.

  • sort_direction

    Określa kolejność sortowania dla kolejności według wyrażenia.

    • ASC: kierunek sortowania dla tego wyrażenia jest rosnąco.
    • DESC: Kolejność sortowania dla tego wyrażenia jest malejąco.

    Jeśli kierunek sortowania nie jest jawnie określony, domyślnie wiersze są sortowane rosnąco.

  • nulls_sort_order

    Opcjonalnie określa, czy wartości NULL są zwracane przed/po wartościach innych niż NULL. Jeśli null_sort_order nie określono parametru , najpierw posortuj listy NULLs, jeśli kolejność sortowania to ASC , a sortowanie nulls ostatnie, jeśli kolejność sortowania to DESC.

    • NULLS FIRST: wartości NULL są zwracane najpierw niezależnie od kolejności sortowania.
    • NULLS LAST: wartości NULL są zwracane na końcu, niezależnie od kolejności sortowania.

Jeśli wyrażenie ma typ danych, który nie obsługuje zamawiania, na przykład MAP, Azure Databricks zgłasza DATATYPE_MISMATCH. INVALID_ORDERING_TYPE.

Podczas określania więcej niż jednego sortowania wyrażeń następuje od lewej do prawej. Wszystkie wiersze są sortowane według pierwszego wyrażenia. Jeśli dla pierwszego wyrażenia istnieją zduplikowane wartości, drugie wyrażenie jest używane do rozpoznawania kolejności w grupie duplikatów itd. Wynikowa kolejność nie jest deterministyczna, jeśli istnieją zduplikowane wartości we wszystkich wyrażeniach kolejności.

Typowe warunki błędów

Przykłady

> 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