Puedes ejecutar cualquier consulta avanzada en nuestra consola interactiva: Abrir consola SQL →
ORDER BY avanzado: ordenación profesional de datos
En SQL avanzado, ORDER BY se convierte en una herramienta poderosa: ordenación múltiple, condicional, por expresiones, por funciones ventana y más. Aquí aprenderás a controlar el orden de tus resultados con precisión quirúrgica.
Tabla de contenidos
1. Ordenación múltiple
SELECT nombre, categoria, precio
FROM productos
ORDER BY categoria ASC, precio DESC;
2. ORDER BY con expresiones
SELECT nombre, precio, precio * 1.21 AS precio_con_iva
FROM productos
ORDER BY precio * 1.21 DESC;
3. ORDER BY con CASE
Permite ordenar según condiciones personalizadas.
SELECT nombre, estado
FROM pedidos
ORDER BY CASE
WHEN estado = 'Enviado' THEN 1
WHEN estado = 'Pendiente' THEN 2
ELSE 3
END;
4. NULLS FIRST / NULLS LAST
SELECT nombre, descuento
FROM productos
ORDER BY descuento DESC NULLS LAST;
5. ORDER BY dentro de OVER()
SELECT fecha, ventas,
SUM(ventas) OVER(ORDER BY fecha) AS acumulado
FROM ventas_diarias;
6. Ejemplos prácticos
-- Ordenación por longitud del nombre
SELECT nombre
FROM usuarios
ORDER BY LENGTH(nombre);
-- Ordenación por prioridad personalizada
SELECT tarea, prioridad
FROM tareas
ORDER BY CASE prioridad
WHEN 'Alta' THEN 1
WHEN 'Media' THEN 2
ELSE 3
END;
-- Ordenación por fecha más reciente
SELECT *
FROM logs
ORDER BY fecha DESC;
7. Ejercicios para practicar
- Ordena productos por precio y luego por nombre.
- Ordena usuarios por la longitud del nombre.
- Ordena pedidos por estado usando CASE.
- Ordena productos colocando NULL al final.
- Explica por qué ORDER BY puede afectar el rendimiento.
SELECT nombre, precio
FROM productos
ORDER BY precio ASC, nombre ASC;
SELECT nombre
FROM usuarios
ORDER BY LENGTH(nombre);
SELECT nombre, estado
FROM pedidos
ORDER BY CASE
WHEN estado = 'Enviado' THEN 1
WHEN estado = 'Pendiente' THEN 2
ELSE 3
END;
SELECT nombre, descuento
FROM productos
ORDER BY descuento NULLS LAST;
-- ORDER BY puede requerir ordenar grandes volúmenes de datos.
8. Mini‑proyecto: Ordenación inteligente de pedidos
SELECT usuario, producto, estado, fecha,
CASE
WHEN estado = 'Enviado' THEN 1
WHEN estado = 'Pendiente' THEN 2
ELSE 3
END AS prioridad
FROM pedidos
ORDER BY prioridad ASC, fecha DESC;
9. Errores comunes
- Ordenar por columnas no seleccionadas sin entender el impacto.
- Usar CASE sin cubrir todos los casos.
- Olvidar NULLS FIRST / LAST.
- Ordenar grandes tablas sin índices adecuados.
10. Preguntas frecuentes
¿ORDER BY puede usar índices?
Sí, si coincide con el orden del índice.
¿ORDER BY afecta el rendimiento?
Sí, especialmente en tablas grandes.