После того, как запрос создал выходную таблицу (после обработки списка выбора), ее можно дополнительно отсортировать. Если сортировка не выбрана, строки будут возвращены в неопределенном порядке. Фактический порядок в этом случае будет зависеть от типов плана сканирования и соединения и порядка на диске, но на него нельзя полагаться. Конкретный порядок вывода может быть гарантирован только в том случае, если шаг сортировки выбран явно.
Предложение ORDER BY
определяет порядок сортировки:
SELECT select_list
FROM table_expression
ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
[, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]
Выражение(я) сортировки может быть любым выражением, которое допустимо в списке выбора запроса. Пример:
SELECT a, b FROM table1 ORDER BY a + b, c;
Когда указано более одного выражения, более поздние значения используются для сортировки строк, которые равны в соответствии с более ранними значениями. За каждым выражением может следовать необязательное ключевое слово ASC
или DESC
, чтобы установить направление сортировки по возрастанию или по убыванию. ASC
порядок по умолчанию. В порядке возрастания сначала помещаются меньшие значения, где « меньше » определяется с точки зрения <
оператора. Точно так же порядок убывания определяется >
оператором.
Параметры NULLS FIRST
и NULLS LAST
можно использовать, чтобы определить, появляются ли пустые значения до или после ненулевых значений в порядке сортировки. По умолчанию нулевые значения сортируются так, как если бы они были больше любого ненулевого значения; то есть NULLS FIRST
это значение по умолчанию для DESC
порядка и в NULLS LAST
противном случае.
Обратите внимание, что параметры упорядочения рассматриваются независимо для каждого столбца сортировки. Например ORDER BY x, y DESC
означает ORDER BY x ASC, y DESC
, что не то же самое, что ORDER BY x DESC, y DESC
.
A sort_expression
также может быть меткой столбца или номером выходного столбца, например:
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;
оба из которых сортируются по первому выходному столбцу. Обратите внимание, что имя выходного столбца должно быть самостоятельным, то есть его нельзя использовать в выражении — например, это неправильно :
SELECT a + b AS sum, c FROM table1 ORDER BY sum + c; -- wrong
Это ограничение сделано для уменьшения неоднозначности. Неоднозначность сохраняется, если ORDER BY
элемент представляет собой простое имя, которое может соответствовать либо имени выходного столбца, либо столбцу из табличного выражения. Выходной столбец используется в таких случаях. Это может вызвать путаницу только в том случае, если вы AS
переименуете выходной столбец, чтобы он соответствовал имени какого-либо другого столбца таблицы.
ORDER BY
может применяться к результату UNION
, INTERSECT
или EXCEPT
комбинации, но в этом случае разрешена сортировка только по именам выходных столбцов или числам, а не по выражениям.
0 комментариев