CodeGym /Cursos /SQL SELF /Errores típicos al ordenar y formatear datos

Errores típicos al ordenar y formatear datos

SQL SELF
Nivel 6 , Lección 4
Disponible

Ordenar y formatear — suena lógico y útil. Pero a veces puedes liarte sin querer y obtener resultados inesperados. ¡Vamos a repasar juntos los errores más comunes para que tus datos siempre se vean perfectos y estén en el orden correcto!

1. Ordenar datos de diferentes tipos

Imagínate esto: estás ordenando una tabla por una columna que tiene una mezcla de números y strings. PostgreSQL, claro, intentará ayudarte, pero el resultado puede sorprenderte. Por ejemplo, tienes una tabla donde value es texto:

id value
1 10
2 2
3 apple
4 20

Y escribes la consulta:

SELECT *
FROM mixed_data 
ORDER BY value;

¿Resultado esperado? ¿Quizá: 2, 10, 20, apple? Nope, PostgreSQL ordena los strings según el orden lexicográfico/alfabético, y el resultado será: 10, 2, 20, apple.

¿Cómo evitar el error?

Si sabes que tu columna de texto tiene datos numéricos, conviértelos explícitamente a número antes de ordenar:

SELECT * FROM mixed_data ORDER BY value::INT;

Ahora el resultado será: 2, 10, 20.

¡Pero ojo! Si en tu columna hay strings que no se pueden convertir a número, la consulta dará error.

2. Indicar varias columnas para ordenar

Un error típico es olvidarse del orden de prioridad al ordenar por varias columnas. Por ejemplo, quieres ordenar estudiantes por apellido y luego por edad, pero te confundes con el orden:

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

Tu consulta:

-- Orden incorrecta
SELECT * 
FROM students 
ORDER BY age, last_name;

Resultado:

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

En este caso, PostgreSQL primero ordena los estudiantes por edad y luego por apellido. No es exactamente lo que querías, ¿verdad?

Consulta correcta:

SELECT *
FROM students 
ORDER BY last_name, age;

Resultado:

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

Ahora la ordenación primero va por apellido, y dentro del apellido — por edad. ¡Justo lo que esperabas!

3. Ordenar con diferentes direcciones

A veces necesitas ordenar varias columnas con diferentes direcciones. Por ejemplo, ordenar productos por categoría (ascendente), y dentro de cada categoría — por precio (descendente). El error es olvidarse de indicar la dirección para la segunda columna:

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

Tu consulta:

-- Orden incorrecta
SELECT * 
FROM products 
ORDER BY category, price;

Resultado: los precios dentro de las categorías están ordenados de menor a mayor, pero quizá tú querías de mayor a menor.

Consulta correcta:

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

Errores al formatear

4. Uso incorrecto de CONCAT()

Supón que quieres juntar nombre y apellido en un solo string, pero con prisas te olvidas de poner un separador entre ellos:

id first_name last_name
1 John Doe
2 Jane Smith

Tu consulta:

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

Resultado:

full_name
JohnDoe
JaneSmith

¿Cómo arreglarlo?

Añade un espacio entre nombre y apellido:

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

Ahora todo se ve mucho mejor:

full_name
John Doe
Jane Smith

5. Errores usando CAST()

Supón que intentas convertir una fecha a string para mostrarla bonito, pero te olvidas de indicar el formato:

id event_date
1 2023-01-15

Tu consulta:

-- Conversión incorrecta
SELECT 
    CAST(event_date AS TEXT) 
FROM events;

Resultado: la fecha se convierte al formato YYYY-MM-DD, que no siempre es cómodo para tus usuarios.

¿Cómo arreglarlo?

Usa la función TO_CHAR() para indicar el formato:

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

Ahora la fecha se muestra en formato 15-01-2023.

6. Errores usando DISTINCT

DISTINCT — es una herramienta potente para sacar valores únicos, pero a veces se usa mal. Por ejemplo, quieres obtener una lista de nombres únicos de empleados:

SELECT DISTINCT first_name, last_name
FROM employees;

A primera vista, la consulta parece correcta, pero si dos empleados tienen el mismo nombre y apellido, aparecerán como un solo resultado, aunque sean personas diferentes.

Ejemplo de datos:

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

Resultado de la consulta:

first_name last_name
Alex Lin
Maria Chi

¿Cómo evitar el error?

Añade la clave primaria para garantizar la unicidad:

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

Resultado de la consulta con DISTINCT ON (id):

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

¿Cómo evitar errores?

Trabajar con datos requiere atención al detalle. Para evitar los errores de arriba:

Revisa los tipos de datos: asegúrate de que las funciones que usas soportan los tipos de tus columnas.

Revisa el orden de la ordenación: asegúrate de que las columnas están en el orden correcto. No olvides las direcciones de ordenación ASC, DESC.

Prueba las consultas con pequeños conjuntos de datos: así puedes pillar errores desde el principio.

No olvides la documentación de PostgreSQL: te ayudará a resolver dudas sobre funciones y su uso. Aquí tienes el enlace: docu oficial de PostgreSQL.

¡Ahora ya estás listo para enfrentarte a cualquier misterio de formateo y ordenación! Seguimos adelante.

1
Cuestionario/control
Extracción de valores únicos, nivel 6, lección 4
No disponible
Extracción de valores únicos
Extracción de valores únicos
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION