Quando você trabalha com bancos de dados, muitas vezes precisa ver os dados em uma ordem específica. Por exemplo:
- "Me mostra o top-10 dos produtos mais caros."
- "Quais pedidos foram os mais recentes?"
- "Qual a idade dos alunos, começando pelos mais novos?"
Querer organizar os dados é super normal: mesmo se você for um programador sinistro, lidar com um monte de linhas bagunçadas não é nada legal. Por isso o SQL dá pra gente uma ferramenta pra ordenar as linhas do resultado — o operador ORDER BY.
O básico da ordenação com ORDER BY
ORDER BY é tipo uma varinha mágica que deixa você organizar as linhas do resultado. Sem ele, os dados vêm em uma ordem "aleatória" (não é bug do banco, só que a ordem não é garantida).
Olha só como é a sintaxe do ORDER BY:
SELECT coluna1, coluna2
FROM tabela
ORDER BY coluna1 DESC;
coluna1: nome da coluna que você quer usar pra ordenar.ASC: ordenação crescente (isso é o valor padrão, então pode deixar de fora se quiser).DESC: ordenação decrescente.
Exemplo
Imagina que a gente tem uma tabela students:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
Bora ordenar os alunos pela idade (do menor pro maior):
SELECT name, age
FROM students
ORDER BY age ASC;
Resultado:
| name | age |
|---|---|
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Se mudar a direção da ordenação pra decrescente:
SELECT name, age
FROM students
ORDER BY age DESC;
O resultado vai ser assim:
| name | age |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Ordenando por várias colunas
Às vezes, uma coluna só não resolve. Imagina que tem vários alunos com a mesma idade e você quer adicionar uma ordenação extra, tipo pelo nome.
Ordenando por várias colunas:
SELECT coluna1, coluna2
FROM tabela
ORDER BY coluna1 DESC, coluna2 ASC;
Vamos ver um exemplo pra essa tabela:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
| 4 | Anna | 19 |
Query:
SELECT name, age
FROM students
ORDER BY age ASC, name ASC;
Resultado:
| name | age |
|---|---|
| Anna | 19 |
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Aqui primeiro rola a ordenação pela idade (crescente), e dentro de cada idade, pelo nome em ordem alfabética.
Ordenando com aliases
Se você usa aliases (apelidos) pras colunas, também pode ordenar por esses aliases.
SELECT name AS "Nome", age AS "Idade"
FROM students
ORDER BY "Idade" DESC;
Resultado:
| Nome | Idade |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Por que isso é importante? Porque antigamente não dava pra fazer isso, e era treta ordenar por colunas calculadas.
Ordenando com colunas calculadas
O SQL deixa você fazer cálculos direto na query, e depois ordenar pelo resultado desses cálculos.
Exemplo 1. Cálculo simples
SELECT name, age, age * 2 AS idade_dobrada
FROM students
ORDER BY idade_dobrada DESC;
Resultado:
| name | age | idade_dobrada |
|---|---|---|
| Alex | 22 | 44 |
| Otto | 21 | 42 |
| Maria | 19 | 38 |
Exemplo 2. Usando funções. Imagina que a gente guarda preços dos produtos na tabela products:
| product_name | price |
|---|---|
| Produto A | 100 |
| Produto B | 200 |
| Produto C | 150 |
Agora vamos ordenar pelo preço arredondado, multiplicado por 0.9 (tipo, com desconto). A função ROUND devolve o número arredondado pra quantas casas decimais você quiser.
SELECT product_name, price, ROUND(price * 0.9, 1) AS preco_com_desconto
FROM products
ORDER BY preco_com_desconto ASC;
O resultado vai ser assim:
| product_name | price | preco_com_desconto |
|---|---|---|
| Produto A | 100 | 90 |
| Produto C | 150 | 135 |
| Produto B | 200 | 180 |
Aplicação prática da ordenação
Ordenar é chave nos seguintes cenários:
- Montar relatórios, tipo o top-10 das melhores vendas do mês.
- Mostrar dados em interfaces de usuário, tipo lista de pedidos ordenada por data.
- Gerar listas pra análise, tipo separar grupos por prioridade.
Erros comuns ao usar ORDER BY
Os erros podem aparecer em qualquer canto. Se liga em alguns pontos pra prestar atenção:
- Se tentar ordenar por uma coluna que não existe, vai dar erro:
column "not_a_column" does not exist. - Ordenar por alias que é usado numa coluna calculada pode confundir, se o alias foi definido num nível acima.
- Se esquecer de colocar a direção da ordenação, o PostgreSQL vai usar
ASCpor padrão. Não é erro, mas pode dar resultado inesperado.
Agora você já sabe como controlar a ordenação no PostgreSQL usando ORDER BY. Lembra que dados bem organizados são metade do caminho pra fazer queries SQL eficientes. Bora pra próxima! 😉
GO TO FULL VERSION