Clausule SORT BY
Van toepassing op: Databricks SQL Databricks Runtime
Retourneert de resultaatrijen die binnen elke partitie in de door de gebruiker opgegeven volgorde zijn gesorteerd. Wanneer er meer dan één partitie SORT BY
is, kan het resultaat worden geretourneerd dat gedeeltelijk is geordend. Dit verschilt van ORDER BY-component die een totale volgorde van de uitvoer garandeert.
Syntaxis
SORT BY { expression [ sort_direction nulls_sort_oder ] } [, ...]
sort_direction
[ ASC | DEC ]
nulls_sort_order
[ NULLS FIRST | NULLS LAST ]
Parameters
-
Een expressie van elk type dat wordt gebruikt om een lokale partitievolgorde tot stand te brengen waarin resultaten worden geretourneerd.
Als de expressie een letterlijke INT-waarde is, wordt deze geïnterpreteerd als een kolompositie in de selectielijst.
sort_direction
Hiermee geeft u de sorteervolgorde voor de sorteervolgorde voor de expressie op.
ASC
: De sorteerrichting voor deze expressie is oplopend.DESC
: De sorteervolgorde voor deze expressie is aflopend.
Als de sorteerrichting niet expliciet is opgegeven, worden standaard rijen oplopend gesorteerd.
nulls_sort_order
Hiermee geeft u optioneel aan of NULL-waarden worden geretourneerd vóór/na niet-NULL-waarden. Als
null_sort_order
dit niet is opgegeven, sorteren NULL's eerst als sorteervolgorde isASC
en NULLS-sorteervolgorde het laatst als de sorteervolgorde isDESC
.NULLS FIRST
: NULL-waarden worden eerst geretourneerd, ongeacht de sorteervolgorde.NULLS LAST
: NULL-waarden worden als laatste geretourneerd, ongeacht de sorteervolgorde.
Wanneer u meer dan één expressies sorteert, wordt van links naar rechts gesorteerd. Alle rijen binnen de partitie worden gesorteerd op de eerste expressie. Als er dubbele waarden voor de eerste expressie zijn, wordt de tweede expressie gebruikt om de volgorde binnen de groep dubbele waarden enzovoort op te lossen. De resulterende volgorde is niet deterministisch als er dubbele waarden in alle volgorde per expressie zijn.
Voorbeelden
> 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