SORT BY záradék

A következőre vonatkozik:check marked yes Databricks SQL check marked yes Databricks Runtime

A felhasználó által megadott sorrendben az egyes partíciókon belül rendezett eredménysorokat adja vissza. Ha egynél több partíció SORT BY is van, előfordulhat, hogy részlegesen rendezett eredményt ad vissza. Ez eltér az ORDER BY záradéktól, amely garantálja a kimenet teljes sorrendjét.

Szintaxis

SORT BY { expression [ sort_direction nulls_sort_oder ] } [, ...]

sort_direction
 [ ASC | DEC ]

nulls_sort_order
 [ NULLS FIRST | NULLS LAST ]

Paraméterek

  • Kifejezés

    Bármilyen típusú kifejezés, amely egy partíció helyi sorrendjének meghatározására szolgál, amelyben a rendszer eredményeket ad vissza.

    Ha a kifejezés literál INT érték, akkor a rendszer oszloppozícióként értelmezi a kijelölési listában.

  • sort_direction

    A rendezés rendezési sorrendjét adja meg kifejezés szerint.

    • ASC: A kifejezés rendezési iránya növekvő.
    • DESC: A kifejezés rendezési sorrendje csökkenő.

    Ha a rendezési irány nincs explicit módon megadva, akkor alapértelmezés szerint a sorok növekvő sorrendben lesznek rendezve.

  • nulls_sort_order

    Nem kötelező megadni, hogy a NULL értékek nem NULL értékek előtt vagy után legyenek-e visszaadva. Ha null_sort_order nincs megadva, akkor az NULL-ek rendeznek először, ha a rendezési sorrend, ASC a NULLS rendezés pedig az utolsó, ha a rendezési sorrend .DESC

    • NULLS FIRST: A NULL értékeket a rendszer a rendezési sorrendtől függetlenül először adja vissza.
    • NULLS LAST: A NULL értékeket a rendszer a rendezési sorrendtől függetlenül utolsóként adja vissza.

Egynél több kifejezés megadásakor balról jobbra történik a rendezés. A partíción belüli összes sor az első kifejezés szerint van rendezve. Ha az első kifejezéshez ismétlődő értékek tartoznak, a második kifejezés az ismétlődések csoportján belüli sorrend feloldására szolgál, és így tovább. Az eredményként kapott sorrend nem determinisztikus, ha az összes sorrendben ismétlődő értékek vannak kifejezések szerint.

Példák

> CREATE TEMP VIEW person (zip_code, name, age)
    AS VALUES (94588, 'Zen Hui', 50),
              (94588, 'Dan Li', 18),
              (94588, 'Anil K', 27),
              (94588, 'John V', NULL),
              (94511, 'David K', 42),
              (94511, 'Aryan B.', 18),
              (94511, 'Lalit B.', NULL);

-- Use `REPARTITION` hint to partition the data by `zip_code` to
-- examine the `SORT BY` behavior. This is used in rest of the
-- examples.

-- Sort rows by `name` within each partition in ascending manner
> SELECT /*+ REPARTITION(zip_code) */ name, age, zip_code FROM person
    SORT BY name;
   Anil K   27    94588
   Dan Li   18    94588
   John V NULL    94588
  Zen Hui   50    94588
 Aryan B.   18    94511
  David K   42    94511
 Lalit B. NULL    94511

-- Sort rows within each partition using column position.
> SELECT /*+ REPARTITION(zip_code) */ name, age, zip_code FROM person
    SORT BY 1;
   Anil K   27    94588
   Dan Li   18    94588
   John V null    94588
  Zen Hui   50    94588
 Aryan B.   18    94511
  David K   42    94511
 Lalit B. null    94511

-- Sort rows within partition in ascending manner keeping null values to be last.
> SELECT /*+ REPARTITION(zip_code) */ age, name, zip_code FROM person
    SORT BY age NULLS LAST;
   18   Dan Li    94588
   27   Anil K    94588
   50  Zen Hui    94588
 NULL   John V    94588
   18 Aryan B.    94511
   42  David K    94511
 NULL Lalit B.    94511

-- Sort rows by age within each partition in descending manner, which defaults to NULL LAST.
> SELECT /*+ REPARTITION(zip_code) */ age, name, zip_code FROM person
    SORT BY age DESC;
   50  Zen Hui    94588
   27   Anil K    94588
   18   Dan Li    94588
 NULL   John V    94588
   42  David K    94511
   18 Aryan B.    94511
 NULL Lalit B.    94511

-- Sort rows by age within each partition in descending manner keeping null values to be first.
> SELECT /*+ REPARTITION(zip_code) */ age, name, zip_code FROM person
    SORT BY age DESC NULLS FIRST;
 NULL   John V    94588
   50  Zen Hui    94588
   27   Anil K    94588
   18   Dan Li    94588
 NULL Lalit B.    94511
   42  David K    94511
   18 Aryan B.    94511

-- Sort rows within each partition based on more than one column with each column having
-- different sort direction.
> SELECT /*+ REPARTITION(zip_code) */ name, age, zip_code FROM person
    SORT BY name ASC, age DESC;
   Anil K   27    94588
   Dan Li   18    94588
   John V null    94588
  Zen Hui   50    94588
 Aryan B.   18    94511
  David K   42    94511
 Lalit B. null    94511