devgameschool

Como ordenar e limitar o resultado no SQL?

O ORDER BY manda na ordem das linhas e o LIMIT corta a lista depois de ordenada. Juntos, eles respondem as perguntas de superlativo: o maior, o mais recente, o último a sair, os três primeiros.

Como se escreve

SELECT <colunas> FROM <tabela> WHERE <condição>
ORDER BY <coluna> ASC LIMIT <quantas> OFFSET <quantas pular>;
ASC   do menor para o maior, do mais antigo para o mais novo, de A a Z (é o padrão)
DESC  ao contrário

A ordem das partes é fixa: primeiro WHERE, depois ORDER BY, e o LIMIT sempre por último.

Exemplo para rodar

Todos os exemplos usam duas tabelinhas: livro (titulo, autor, ano, paginas) e emprestimo (livro, retirado_em, leitor, dias).

SELECT titulo, paginas FROM livro ORDER BY paginas DESC LIMIT 3;
titulo paginas
O Cortiço 304
Capitães da Areia 280
Triste Fim de Policarpo Quaresma 232
3 linhas no resultado

Dicas

  • Sem escrever nada, o SQLite ordena crescente. Só se escreve ASC quando ajuda a ler.
  • Várias colunas: ORDER BY ano DESC, titulo ASC. O segundo critério só entra para desempatar o primeiro.
  • LIMIT 1 responde qual foi o último — mas só depois de um ORDER BY que coloque o certo em cima. LIMIT sozinho corta uma ordem que você não escolheu, e a linha que sobra é por acaso.
  • LIMIT 3 OFFSET 3 pula as três primeiras e traz as três seguintes. Serve para folhear uma lista comprida de três em três.
  • Texto com acento ordena pelo código da letra, não pelo dicionário: Álvaro cai depois de Zuleica. Em nome de gente, isso às vezes surpreende.

Erros comuns

Você escreveu
SELECT titulo FROM livro LIMIT 3 ORDER BY paginas;
O SQLite respondeu
near "ORDER": syntax error
Como consertar
O LIMIT é sempre a última parte da consulta. Inverta: ORDER BY paginas LIMIT 3.
Você escreveu
SELECT titulo FROM livro ORDER BY pagina DESC;
O SQLite respondeu
no such column: pagina
Como consertar
A coluna é paginas, no plural.
Você escreveu
SELECT titulo, paginas FROM livro ORDER BY paginas DESC LIMIT 1;
O SQLite respondeu
Nenhum erro, e a resposta errada quando a pergunta era o menor.
Como consertar
DESC começa pelo maior. Para o menor, é ASC — ou, sem escrever nada, que dá no mesmo.

Veja também

Onde isso aparece no jogo

No jogo Delegacia SQL, ORDER BY e LIMIT é o que resolve o inquérito 005, "Quem ligou primeiro". SISPOL, que aparece nas dicas, é o computador da delegacia do jogo.

Jogar Delegacia SQL