klausa ORDER BY

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Menampilkan baris hasil yang telah diurutkan sesuai urutan yang ditentukan oleh pengguna. Berbeda dengan klausul SORT BY, klausul ini menjamin urutan total dalam output.

Sintaks

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 ]

Parameter

  • ALL

    Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 12.2 LTS ke atas

    Istilah singkat yang setara dengan menyebutkan semua ekspresi dalam daftar SELECT sesuai dengan urutan kemunculannya. Jika sort_direction atau nulls_sort_order ditentukan, ekspresi tersebut berlaku untuk setiap ekspresi.

  • expression

    Ekspresi jenis apa pun yang digunakan untuk menetapkan urutan tempat hasil ditampilkan.

    Jika ekspresi adalah nilai harfiah INTEGER , ekspresi ditafsirkan sebagai posisi kolom dalam daftar pilih.

    Jika nilai INTEGER harfiah mengacu pada posisi yang berada di luar rentang, Azure Databricks menaikkan ORDER_BY_POS_OUT_OF_RANGE.

  • sort_direction

    Menentukan urutan sortir untuk urutan yang didasarkan pada ekspresi.

    • ASC: Arah pengurutan untuk ekspresi ini adalah menaik.
    • DESC: Urutan penyortiran untuk ekspresi ini adalah menurun.

    Jika arah pengurutan tidak ditentukan secara eksplisit, maka baris akan diurutkan naik secara default.

  • nulls_sort_order

    Secara opsional menentukan apakah nilai NULL dikembalikan sebelum/setelah nilai non-NULL. Jika null_sort_order tidak ditentukan, NULL akan diurutkan terlebih dahulu jika urutan sortirnya adalah ASC dan NULLS akan diurutkan terakhir jika urutan sortirnya adalah DESC.

    • NULLS FIRST: Nilai NULL dikembalikan terlebih dahulu terlepas dari urutan pengurutan.
    • NULLS LAST: Nilai NULL dikembalikan terakhir terlepas dari urutan pengurutan.

Jika ekspresi memiliki jenis data yang tidak mendukung pengurutan, seperti MAP, Azure Databricks menaikkan DATATYPE_MISMATCH. INVALID_ORDERING_TYPE.

Saat menentukan lebih dari satu ekspresi, pengurutan terjadi dari kiri ke kanan. Semua baris diurutkan berdasarkan pada ekspresi pertama. Jika ada nilai duplikat untuk ekspresi pertama, ekspresi kedua digunakan untuk menyelesaikan urutan dalam grup duplikat dan sebagainya. Urutan yang dihasilkan tidak deterministik jika ada nilai duplikat di semua urutan menurut ekspresi.

Kondisi kesalahan umum

Contoh

> 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