После того, как запрос создал выходную таблицу (после обработки списка выбора), ее можно дополнительно отсортировать. Если сортировка не выбрана, строки будут возвращены в неопределенном порядке. Фактический порядок в этом случае будет зависеть от типов плана сканирования и соединения и порядка на диске, но на него нельзя полагаться. Конкретный порядок вывода может быть гарантирован только в том случае, если шаг сортировки выбран явно.
Предложение 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 комментариев