Sdílet prostřednictvím


klauzule ORDER BY

Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime

Vrátí výsledné řádky seřazeným způsobem v zadaném pořadí uživatele. Na rozdíl od klauzule SORT BY tato klauzule zaručuje celkové pořadí ve výstupu.

Syntaxe

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

  • VŠE

    Platí pro:označeno ano Databricks SQL označeno ano Databricks Runtime 12.2 LTS a vyšší

    Zkratka odpovídající zadání všech výrazů v seznamu SELECT v pořadí, v jakém k nim dochází. Pokud sort_direction nebo nulls_sort_order jsou zadány, platí pro každý výraz.

  • výraz

    Výraz libovolného typu použitého k vytvoření pořadí, ve kterém se vrátí výsledky.

    Pokud je výraz literálovou hodnotou INT, interpretuje se jako pozice sloupce ve výběrovém seznamu.

  • sort_direction

    Určuje pořadí řazení pro pořadí podle výrazu.

    • ASC: Směr řazení pro tento výraz je vzestupný.
    • DESC: Pořadí řazení pro tento výraz je sestupné.

    Pokud není explicitně zadán směr řazení, jsou ve výchozím nastavení řádky seřazeny vzestupně.

  • nulls_sort_order

    Volitelně určuje, jestli se hodnoty NULL vrátí před nebo za hodnotami, které nejsou null. Pokud není uvedeno null_sort_order, hodnoty NULL se seřadí jako první, pokud je pořadí řazení ASC, a jako poslední, pokud je pořadí řazení DESC.

    • NULLS FIRST: Hodnoty NULL se vrátí jako první bez ohledu na pořadí řazení.
    • NULLS LAST: Hodnoty NULL se vrátí jako poslední bez ohledu na pořadí řazení.

Při zadávání více než jednoho výrazu se řazení provádí zleva doprava. Všechny řádky jsou seřazené podle prvního výrazu. Pokud jsou u prvního výrazu duplicitní hodnoty, použije se druhý výraz k určení pořadí ve skupině duplicit. Výsledné pořadí není deterministické, pokud existují duplicitní hodnoty napříč všemi pořadími podle výrazů.

Příklady

> 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