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 ]

매개 변수

  • expression

    결과가 반환되는 파티션 로컬 순서를 설정하는 데 사용되는 모든 형식의 식입니다.

    식이 리터럴 INT 값인 경우 선택 목록에서 열 위치로 해석됩니다.

  • sort_direction

    식별 정렬 순서를 지정합니다.

    • ASC: 이 식의 정렬 방향이 오름차순입니다.
    • DESC: 이 식의 정렬 순서가 내림차순입니다.

    정렬 방향을 명시적으로 지정하지 않으면 기본적으로 행이 오름차순으로 정렬됩니다.

  • nulls_sort_order

    필요에 따라 NULL 값이 NULL이 아닌 값 전후에 반환되는지 여부를 지정합니다. 가 지정되지 않은 경우 null_sort_order 정렬 순서가 이면 NULL이 먼저 정렬되고 정렬 순서가 이 ASC 면 NULLS가 마지막으로 정렬됩니다 DESC.

    • NULLS FIRST: NULL 값은 정렬 순서에 관계없이 먼저 반환됩니다.
    • NULLS LAST: NULL 값은 정렬 순서에 관계없이 마지막으로 반환됩니다.

둘 이상의 식 정렬을 지정할 때 왼쪽에서 오른쪽으로 발생합니다. 파티션 내의 모든 행은 첫 번째 식을 기준으로 정렬됩니다. 첫 번째 식에 중복 값이 있는 경우 두 번째 식은 중복 그룹 내에서 순서를 resolve 데 사용됩니다. 식별로 모든 순서에 중복 값이 있는 경우 결과 순서가 결정적이지 않습니다.

> 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