4.5. Ordenação de linhas

Após a consulta ter produzido uma tabela de saída (após a lista de seleção ter sido processada) esta tabela pode, opcionalmente, ser ordenada. Se nenhuma ordenação for especificada, as linhas retornam em uma ordem aleatória. Na verdade, neste caso a ordem depende dos tipos de plano de varredura e de junção e da ordem no disco, mas não se deve confiar nisto. Uma determinada ordem de saída somente pode ser garantida se a etapa de ordenação for explicitamente especificada.

A cláusula ORDER BY especifica a ordenação:

SELECT lista_seleção
    FROM expressão_tabela
    ORDER BY coluna1 [ASC | DESC] [, coluna2 [ASC | DESC] ...]

onde coluna1, etc. fazem referência às colunas da lista de seleção. Pode ser tanto o nome de saída de uma coluna (veja a Seção 4.3.2) quanto o número da coluna. Alguns exemplos:

SELECT a, b FROM tabela1 ORDER BY a;
SELECT a + b AS soma, c FROM tabela1 ORDER BY soma;
SELECT a, sum(b) FROM tabela1 GROUP BY a ORDER BY 1;

Como uma extensão do padrão SQL, o PostgreSQL também permite a ordenação por expressões arbitrárias:

SELECT a, b FROM tabela1 ORDER BY a + b;

Também é permitido fazer referência a nomes de colunas da cláusula FROM que foram renomeados na lista de seleção:

SELECT a AS b FROM tabela1 ORDER BY a;

Mas estas extensões não funcionam nas consultas que envolvem UNION, INTERSECT ou EXCEPT, e não são portáveis para outros bancos de dados SQL.

Cada coluna especificada pode ser seguida pela palavra opcional ASC ou DESC, para determinar a forma de ordenação como ascendente ou descendente. A forma ASC é o padrão. A ordenação ascendente coloca os valores menores na frente, sendo que "menor" é definido nos termos do operador <. De forma semelhante, a ordenação descendente é determinada pelo operador >.

Se mais de uma coluna de ordenação for especificada, as últimas colunas são utilizadas para ordenar as linhas iguais na ordem imposta pelas primeiras colunas ordenadas.