CodeGym /Cursos /SQL SELF /Erros comuns na ordenação e formatação de dados

Erros comuns na ordenação e formatação de dados

SQL SELF
Nível 6, Lição 4
Disponível

Ordenar e formatar — faz todo sentido e é super útil. Mas às vezes a gente se enrola e acaba tendo resultados bem esquisitos. Bora ver juntos os erros mais comuns pra garantir que seus dados sempre fiquem lindos e na ordem certa!

1. Ordenando dados de tipos diferentes

Imagina a situação: você tá ordenando uma tabela por uma coluna que mistura números e strings. O PostgreSQL até tenta te ajudar, mas o resultado pode te surpreender. Por exemplo, você tem uma tabela onde value é texto:

id value
1 10
2 2
3 apple
4 20

E aí você manda esse SELECT:

SELECT *
FROM mixed_data 
ORDER BY value;

O que você espera? Talvez: 2, 10, 20, apple? Nada disso, o PostgreSQL ordena strings pelo alfabeto, então o resultado vai ser: 10, 2, 20, apple.

Como evitar esse erro?

Se você sabe que sua coluna de texto tem números, converte pra número antes de ordenar:

SELECT * FROM mixed_data ORDER BY value::INT;

Agora o resultado vai ser: 2, 10, 20.

Mas fica ligado: se tiver alguma string que não vira número, o SELECT vai dar erro!

2. Ordenando por várias colunas

Um erro clássico é esquecer a ordem de prioridade quando ordena por mais de uma coluna. Tipo, você quer ordenar estudantes pelo sobrenome e depois pela idade, mas inverte a ordem:

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

Seu SELECT:

-- Ordenação errada
SELECT * 
FROM students 
ORDER BY age, last_name;

Resultado:

id last_name age
1 Lin 18
3 Song 19
2 Lin 20

Nesse caso, o PostgreSQL primeiro ordena pela idade, depois pelo sobrenome. Não era bem isso que você queria, né?

O SELECT certo:

SELECT *
FROM students 
ORDER BY last_name, age;

Resultado:

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

Agora sim, primeiro ordena pelo sobrenome, depois pela idade dentro do sobrenome. Do jeitinho que você queria!

3. Ordenação com direções diferentes

Às vezes você precisa ordenar por colunas diferentes, cada uma com uma direção. Tipo, ordenar produtos por categoria (crescente) e dentro de cada categoria pelo preço (decrescente). O erro é esquecer de botar a direção na segunda coluna:

id category price
1 Electronics 99.99
2 Electronics 199.99
3 Furniture 299.99
4 Furniture 199.99

Seu SELECT:

-- Ordenação errada
SELECT * 
FROM products 
ORDER BY category, price;

Resultado: os preços dentro das categorias ficam em ordem crescente, mas talvez você queria em ordem decrescente.

O SELECT certo:

SELECT *
FROM products 
ORDER BY category ASC, price DESC;

Erros de formatação

4. Usando CONCAT() do jeito errado

Imagina que você quer juntar nome e sobrenome numa string só, mas esquece de colocar um espaço entre eles:

id first_name last_name
1 John Doe
2 Jane Smith

Seu SELECT:

SELECT
    CONCAT(first_name, last_name) AS full_name 
FROM employees;

Resultado:

full_name
JohnDoe
JaneSmith

Como arrumar?

Coloca um espaço entre nome e sobrenome:

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

Agora sim, fica bem mais bonito:

full_name
John Doe
Jane Smith

5. Erros usando CAST()

Imagina que você quer transformar uma data em string pra mostrar bonitinho, mas esquece de botar o formato:

id event_date
1 2023-01-15

Seu SELECT:

-- Conversão errada
SELECT 
    CAST(event_date AS TEXT) 
FROM events;

Resultado: a data vira YYYY-MM-DD, que nem sempre é o que o usuário quer ver.

Como arrumar?

Usa a função TO_CHAR() pra escolher o formato:

SELECT
    TO_CHAR(event_date, 'DD-MM-YYYY') AS formatted_date 
FROM events;

Agora a data aparece assim: 15-01-2023.

6. Erros usando DISTINCT

DISTINCT é super útil pra pegar valores únicos, mas às vezes a galera usa errado. Tipo, você quer uma lista de nomes únicos dos funcionários:

SELECT DISTINCT first_name, last_name
FROM employees;

Parece certo, mas se dois funcionários tiverem o mesmo nome e sobrenome, eles vão aparecer como um só, mesmo sendo pessoas diferentes.

Exemplo de dados:

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Resultado do SELECT:

first_name last_name
Alex Lin
Maria Chi

Como evitar esse erro?

Coloca a chave primária pra garantir que cada um é único:

SELECT DISTINCT ON (id) first_name, last_name
FROM employees;

Resultado do SELECT com DISTINCT ON (id):

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Como evitar esses erros?

Trabalhar com dados exige atenção nos detalhes. Pra não cair nessas ciladas aí de cima:

Confere os tipos de dados: vê se as funções que você tá usando aceitam o tipo das suas colunas.

Confere a ordem de ordenação: garante que as colunas estão na ordem certa. Não esquece de botar ASC, DESC quando precisar.

Testa os SELECTs em tabelinhas pequenas: isso ajuda a pegar erro logo no começo.

Não esquece da documentação do PostgreSQL: ela salva vidas quando pinta dúvida sobre funções e como usar. Olha o link: doc oficial do PostgreSQL.

Agora você já tá pronto pra encarar qualquer mistério de formatação e ordenação! Bora pra próxima.

2
Tarefa
SQL SELF, nível 6, lição 4
Bloqueado
Formatação de string com delimitador
Formatação de string com delimitador
2
Tarefa
SQL SELF, nível 6, lição 4
Bloqueado
Ordenação por múltiplas colunas com direções diferentes
Ordenação por múltiplas colunas com direções diferentes
1
Pesquisa/teste
Extraindo valores únicos, nível 6, lição 4
Indisponível
Extraindo valores únicos
Extraindo valores únicos
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION