عبارة SORT BY

ينطبق على:التحقق الذي تم وضع علامة نعم عليه التحقق من Databricks SQL الذي تم وضع علامة عليه نعم Databricks Runtime

إرجاع صفوف النتائج التي تم فرزها داخل كل قسم بالترتيب المحدد من قبل المستخدم. عندما يكون هناك أكثر من قسم SORT BY واحد قد يرجع نتيجة مرتبة جزئيا. يختلف هذا عن عبارة ORDER BY التي تضمن ترتيبا إجماليا للإخراج.

بناء الجمله

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

sort_direction
 [ ASC | DEC ]

nulls_sort_order
 [ NULLS FIRST | NULLS LAST ]

معلمات

  • التعبير

    تعبير من أي نوع يستخدم لإنشاء ترتيب محلي للقسم يتم فيه إرجاع النتائج.

    إذا كان التعبير قيمة INT حرفية، يتم تفسيره كموضع عمود في قائمة التحديد.

  • sort_direction

    يحدد ترتيب الفرز للفرز حسب التعبير.

    • ASC: اتجاه الفرز لهذا التعبير تصاعدي.
    • DESC: ترتيب الفرز لهذا التعبير تنازلي.

    إذا لم يتم تحديد اتجاه الفرز بشكل صريح، فسيتم فرز الصفوف تصاعديا بشكل افتراضي.

  • nulls_sort_order

    يحدد اختياريا ما إذا كانت القيم NULL يتم إرجاعها قبل/بعد القيم غير الفارغة. إذا null_sort_order لم يتم تحديدها، فسيتم فرز NULLs أولا إذا كان ترتيب الفرز وفرز ASC NULLS الأخير إذا كان ترتيب الفرز هو DESC.

    • NULLS FIRST: يتم إرجاع قيم NULL أولا بغض النظر عن ترتيب الفرز.
    • NULLS LAST: يتم إرجاع القيم الخالية أخيرا بغض النظر عن ترتيب الفرز.

عند تحديد أكثر من فرز تعبير واحد يحدث من اليسار إلى اليمين. يتم فرز جميع الصفوف داخل القسم حسب التعبير الأول. إذا كانت هناك قيم مكررة للتعبير الأول، يتم استخدام التعبير الثاني لحل الترتيب داخل مجموعة التكرارات وما إلى ذلك. الترتيب الناتج ليس محددا إذا كانت هناك قيم مكررة عبر جميع الترتيب حسب التعبيرات.

امثله

> 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