- Categorias:
ORDER BY¶
Especifica uma ordenação das linhas da tabela de resultados a partir de uma lista SELECT.
Sintaxe¶
SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
- Onde:
orderItem ::= { <column_alias> | <position> | <expr> } [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
column_alias
Alias de coluna que aparece na lista SELECT do bloco de consulta.
position
Posição de uma expressão na lista SELECT.
expr
Qualquer expressão em tabelas no escopo atual.
ASC | DESC
Opcionalmente, retorna os valores da chave de classificação em ordem ascendente (do mais baixo para o mais alto) ou descendente (do mais alto para o mais baixo).
Padrão:
ASC
NULLS FIRST | LAST
Opcionalmente especifica se valores NULL são devolvidos antes/depois de valores não NULL, com base na ordem de classificação (
ASC
ouDESC
).Padrão: depende da ordem de classificação (
ASC
ouDESC
); consulte as notas de uso abaixo para detalhes
Notas de uso¶
Todos os dados são ordenados de acordo com o valor do byte numérico de cada caractere na tabela ASCII. A codificação UTF-8 é suportada.
Para valores numéricos, os zeros iniciais antes do ponto decimal e os zeros finais (
0
) após o ponto decimal não têm efeito sobre a ordem de classificação.A menos que especificado de outra forma, os valores NULL são considerados superiores a quaisquer valores não NULL. Como resultado, o pedido para NULLS depende da ordem de classificação:
Se a ordem de classificação for
ASC
, NULLS são devolvidos por último; para forçar NULLS a ser o primeiro, useNULLS FIRST
.Se a ordem de classificação for
DESC
, NULLS são devolvidos primeiro; para forçar NULLS a ser o último, useNULLS LAST
.
Um ORDER BY pode ser usado em diferentes níveis em uma consulta, por exemplo, em uma subconsulta ou dentro de uma subcláusula OVER(). Um ORDER BY dentro de uma subconsulta ou subcláusula se aplica somente dentro dessa subconsulta ou subcláusula. Por exemplo, o ORDER BY nas seguintes ordens de consulta resulta somente dentro da subconsulta, não no nível mais externo da consulta:
select * from ( select branch_name from branch_offices ORDER BY monthly_sales DESC limit 3 ) ;
Neste exemplo, o ORDER BY é especificado na subconsulta, portanto a subconsulta retorna os nomes em ordem de vendas mensais. O ORDER BY na subconsulta não se aplica à consulta externa. Esta consulta retorna os nomes das três filiais que tiveram as vendas mensais mais altas, mas não necessariamente em ordem por vendas mensais.
A classificação pode ser cara. Se você quiser os resultados da consulta externa ordenados, use uma cláusula
ORDER BY
somente no nível superior da consulta, e evite usar cláusulasORDER BY
em subconsultas, a menos que seja necessário.
Exemplos¶
Exemplo de ordenação de cadeias de caracteres:
SELECT column1 FROM VALUES ('a'), ('1'), ('B'), (null), ('2'), ('01'), ('05'), (' this'), ('this'), ('this and that'), ('&'), ('%') ORDER BY column1; +---------------+ | COLUMN1 | |---------------| | this | | % | | & | | 01 | | 05 | | 1 | | 2 | | B | | a | | this | | this and that | | NULL | +---------------+
Exemplo de ordenação de números:
SELECT column1 FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 0.05 | | 0.50 | | 0.50 | | 1.00 | | 2.00 | | 3.00 | | 4.00 | | 5.00 | | 5.00 | | 6.00 | | NULL | +---------+
Exemplo de ordenação de valores NULL:
SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 1 | | 2 | | 3 | | NULL | | NULL | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 NULLS FIRST; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 1 | | 2 | | 3 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 3 | | 2 | | 1 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC NULLS LAST; +---------+ | COLUMN1 | |---------| | 3 | | 2 | | 1 | | NULL | | NULL | +---------+