Ну, ORDER BY необходим для того, чтобы соединить те строки, которые имеют одинаковое значение для «отдельных столбцов». База данных обрабатывает их последовательно, отбрасывая все последующие строки из того же набора. Если бы строки не были отсортированы, это было бы нелегко.
Допустим, этот набор строк:
c1 | c2
---+----
1 | 100
2 | 10
1 | 200
2 | 15
Если вы хотите, чтобы c1 был уникальным, и выберите самый высокий c2, вам нужно будет использовать
select distinct on (c1) *
from the_table
order by c1, c2 desc;
The * Сам 1009 * сгенерирует следующий результат:
c1 | c2
---+----
1 | 200
1 | 100
2 | 15
2 | 10
Обрабатывая этот результат построчно, база данных теперь может эффективно отбрасывать каждую, кроме первой строки, для каждого значения c1
, просто проверяя, является ли это значение меняется от ряда к другому. Если результат не будет отсортирован, эта проверка станет намного сложнее.