Categorias:

Sintaxe de consulta

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 , ... ]
[ ... ]
Copy
Onde:
orderItem ::= { <column_alias> | <position> | <expr> } [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
Copy
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 ou DESC).

Padrão: depende da ordem de classificação (ASC ou DESC); 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, use NULLS FIRST.

    • Se a ordem de classificação for DESC, NULLS são devolvidos primeiro; para forçar NULLS a ser o último, use NULLS 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
             )
        ;
    
    Copy

    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áusulas ORDER 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          |
+---------------+
Copy

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 |
+---------+
Copy

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 |
+---------+
Copy