URUTKAN MENURUT klausul
Berlaku untuk: Databricks SQL Databricks Runtime
Mengembalikan baris hasil yang diurutkan dalam setiap partisi dalam urutan yang ditentukan pengguna. Ketika ada lebih dari satu partisi SORT BY
dapat mengembalikan hasil yang sebagian dipesan. Ini berbeda dari klausulORDER BY yang menjamin total urutan output.
Sintaks
SORT BY { expression [ sort_direction nulls_sort_oder ] } [, ...]
sort_direction
[ ASC | DEC ]
nulls_sort_order
[ NULLS FIRST | NULLS LAST ]
Parameter
-
Ekspresi dari jenis apa pun yang digunakan untuk membuat urutan lokal partisi di mana hasil dikembalikan.
Jika ekspresi adalah nilai INT literal, itu ditafsirkan sebagai posisi kolom dalam daftar pilih.
sort_direction
Menentukan urutan pengurutan untuk pengurutan menurut ekspresi.
ASC
: Arah pengurutan untuk ekspresi ini naik.DESC
: Arah pengurutan untuk ekspresi ini adalah turun.
Jika arah pengurutan tidak ditentukan secara eksplisit, maka baris akan diurutkan naik secara default.
nulls_sort_order
Secara opsional menentukan apakah nilai NULL ditampilkan sebelum/sesudah nilai yang bukan NULL. Jika
null_sort_order
tidak ditentukan, NULL akan diurutkan terlebih dahulu jika urutan sortirnya adalahASC
dan NULLS akan diurutkan terakhir jika urutan sortirnya adalahDESC
.NULLS FIRST
: Nilai NULL ditampilkan terlebih dahulu terlepas dari urutan sortir.NULLS LAST
: Nilai NULL ditampilkan terakhir terlepas dari urutan sortir.
Saat menentukan lebih dari satu pengurutan, ekspresi muncul dari kiri ke kanan. Semua baris dalam partisi diurutkan berdasarkan ekspresi pertama. Jika ada nilai duplikat untuk ekspresi pertama, ekspresi kedua digunakan untuk menyelesaikan urutan dalam grup duplikat dan seterusnya. Urutan yang dihasilkan tidak bersifat deterministik jika ada nilai duplikat di semua urutkan berdasarkan ekspresi.
Contoh
> 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