Cuando trabajas con bases de datos, muchas veces necesitas ver los datos en cierto orden. Por ejemplo:
- "Muéstrame el top-10 de los productos más caros."
- "¿Cuáles pedidos fueron los últimos?"
- "¿Cuál es la edad de los alumnos, empezando por los más jóvenes?"
Es totalmente natural querer tener los datos ordenados: incluso si eres un programador super pro, lidiar con un montón de filas caóticas no es lo más divertido. Por eso SQL nos da una herramienta para ordenar las filas en el resultado — el operador ORDER BY.
Bases de la ordenación con ORDER BY
ORDER BY es como una varita mágica que te deja ordenar las filas en el conjunto de resultados. Sin él, los datos se devuelven en un orden "aleatorio" (no es un bug de la base de datos, simplemente el orden no está garantizado).
Así se ve la sintaxis de ORDER BY:
SELECT columna1, columna2
FROM tabla
ORDER BY columna1 DESC;
columna1: el nombre de la columna por la que quieres ordenar.ASC: orden ascendente (es el valor por defecto, así que puedes omitirlo).DESC: orden descendente.
Ejemplo
Supón que tenemos una tabla students:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
Vamos a ordenar los estudiantes por edad (de menor a mayor):
SELECT name, age
FROM students
ORDER BY age ASC;
Resultado:
| name | age |
|---|---|
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Si cambias la dirección de la ordenación a descendente:
SELECT name, age
FROM students
ORDER BY age DESC;
El resultado será así:
| name | age |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Ordenar por varias columnas
A veces una sola columna no es suficiente para ordenar. Imagina que hay varios estudiantes con la misma edad y quieres añadir un orden extra, por ejemplo, por nombre.
Ordenar por varias columnas:
SELECT columna1, columna2
FROM tabla
ORDER BY columna1 DESC, columna2 ASC;
Vamos con un ejemplo para la siguiente tabla:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
| 4 | Anna | 19 |
Consulta:
SELECT name, age
FROM students
ORDER BY age ASC, name ASC;
Resultado:
| name | age |
|---|---|
| Anna | 19 |
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Aquí primero se ordena por edad (ascendente), y dentro de cada edad — por nombre en orden alfabético.
Ordenar usando alias
Si usas alias para las columnas, también puedes ordenar por esos alias.
SELECT name AS "Nombre", age AS "Edad"
FROM students
ORDER BY "Edad" DESC;
Resultado:
| Nombre | Edad |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
¿Por qué es importante? Porque antes esto no existía y era complicado ordenar por columnas calculadas.
Ordenar usando columnas calculadas
SQL te deja hacer cálculos directamente en la consulta, y luego ordenar por los resultados de esos cálculos.
Ejemplo 1. Un cálculo sencillo
SELECT name, age, age * 2 AS edad_duplicada
FROM students
ORDER BY edad_duplicada DESC;
Resultado:
| name | age | edad_duplicada |
|---|---|---|
| Alex | 22 | 44 |
| Otto | 21 | 42 |
| Maria | 19 | 38 |
Ejemplo 2. Usando funciones. Supón que guardamos los precios de productos en la tabla products:
| product_name | price |
|---|---|
| Producto A | 100 |
| Producto B | 200 |
| Producto C | 150 |
Ahora ordenamos por el precio redondeado, multiplicado por 0.9 (por ejemplo, con descuento). La función ROUND devuelve el número redondeado al decimal que quieras.
SELECT product_name, price, ROUND(price * 0.9, 1) AS precio_descuento
FROM products
ORDER BY precio_descuento ASC;
Así queda el resultado:
| product_name | price | precio_descuento |
|---|---|---|
| Producto A | 100 | 90 |
| Producto C | 150 | 135 |
| Producto B | 200 | 180 |
Aplicaciones prácticas de la ordenación
Ordenar es clave en estos casos:
- Crear reportes, por ejemplo, el top-10 de ventas del mes.
- Mostrar datos en interfaces de usuario, como una lista de pedidos ordenados por fecha.
- Generar listas para análisis, por ejemplo, separar grupos por prioridad.
Errores típicos al usar ORDER BY
Los errores pueden aparecer en cualquier momento. Aquí tienes algunos puntos a tener en cuenta:
- Si intentas ordenar por una columna que no existe, te saldrá un error:
column "not_a_column" does not exist. - Ordenar por un alias usado en una columna calculada puede ser confuso si el alias está definido en un nivel superior.
- Si olvidas poner la dirección de ordenación, PostgreSQL usará
ASCpor defecto. No es un error, pero puede dar resultados inesperados.
Ahora ya sabes cómo controlar la ordenación en PostgreSQL usando ORDER BY. Recuerda: tener los datos bien organizados es la mitad del éxito al crear consultas SQL eficientes. ¡Vamos a la siguiente lección! 😉
GO TO FULL VERSION