Ordenação por várias colunas
Desempate usando chaves de ordenação secundárias.
Ordenação por várias colunas é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
O problema dos empates
Quando ordena por uma única coluna, as linhas com o mesmo valor não têm uma ordem definida entre si. Três produtos com preço 20 podem ser retornados em qualquer sequência.
Para tornar a ordem totalmente previsível, adicione uma segunda chave de ordenação.
-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;Listando várias chaves de ordenação
ORDER BY aceita uma lista de colunas separadas por vírgulas. O banco de dados ordena pela primeira coluna, depois desempata com a segunda e assim por diante.
Aqui, os produtos são ordenados pelo preço; os empates são resolvidos alfabeticamente pelo nome.
SELECT name, price
FROM products
ORDER BY price, name;A ordem das chaves importa
A sequência das colunas altera o resultado. ORDER BY price, name não é igual a ORDER BY name, price.
A primeira chave é a ordenação principal; as chaves seguintes só importam quando as anteriores empatam.
-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;Direção por coluna
Cada chave de ordenação pode ter sua própria direção. Misture ASC e DESC livremente.
Isso agrupa por categoria em ordem alfabética, mas mostra primeiro os itens mais caros dentro de cada categoria.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;DESC se aplica por coluna
Um erro comum é pensar que DESC no final inverte tudo. Ele afeta apenas a coluna que segue diretamente.
Em ORDER BY category, price DESC, category continua em ordem crescente; apenas price fica em ordem decrescente.
-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;Três ou mais chaves
Pode encadear quantas chaves de ordenação forem necessárias. Cada uma só entra em ação quando todas as chaves anteriores são iguais.
Ordene os pedidos por data, depois por cliente e, dentro do mesmo cliente e da mesma data, pelo total.
SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;Uma ordenação estável e determinística
Para obter um resultado totalmente determinístico, termine as chaves de ordenação com uma coluna única, como a chave primária. Assim, duas linhas nunca poderão empatar.
Isso é importante para a paginação, que será apresentada na próxima lição.
SELECT id, name, price
FROM products
ORDER BY price DESC, id;Misturando expressões e colunas
As chaves de ordenação podem combinar colunas simples e expressões. Cada chave é independente.
Isso ordena primeiro pelo valor do estoque em ordem decrescente e depois alfabeticamente pelo nome como critério de desempate.
SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;Ordenação por um booleano para elevar um grupo
Um truque útil é ordenar por uma expressão booleana para colocar um grupo no início ou no fim. No PostgreSQL, false é ordenado antes de true.
Isso mostra primeiro os itens disponíveis em estoque (stock > 0) e, dentro de cada grupo, os mais baratos.
SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;Controlando a posição de NULL
Por padrão no PostgreSQL, NULL fica por último na ordem crescente e por primeiro na decrescente. Substitua esse comportamento usando NULLS FIRST ou NULLS LAST em qualquer chave.
SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;Juntando tudo
Uma ordenação realista com várias chaves pode combinar direção, expressões e tratamento de NULL. Leia da esquerda para a direita: cada chave refina a anterior.
SELECT category, name, price, rating
FROM products
ORDER BY category ASC,
rating DESC NULLS LAST,
price ASC;Verificação rápida
Considere ORDER BY category, price DESC.
Recapitulação
Ordenação por várias colunas em resumo:
- Liste as chaves de ordenação separadas por vírgulas; as anteriores têm prioridade
- Cada chave tem seu próprio
ASC/DESC - Termine com uma coluna única para obter uma ordem determinística
- Controle os valores ausentes com
NULLS FIRST/NULLS LAST
Em seguida, limitará quantas linhas serão retornadas com LIMIT e OFFSET.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC, id;Perguntas Frequentes
A aula “Ordenação por várias colunas” é grátis?
Sim — o texto completo de “Ordenação por várias colunas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Ordenação por várias colunas”?
Desempate usando chaves de ordenação secundárias. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Ordenação por várias colunas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Ordenação com ORDER BY
- Ordenação por várias colunas
- LIMIT e OFFSET
- Encontrando os registros do Top-N