CASE en ORDER BY y agregaciones
Ordenación y recuento condicionales
CASE en ORDER BY y agregaciones es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Ordenar con una prioridad personalizada
La cláusula ORDER BY de SQL normalmente ordena las filas según el valor natural de una columna. Sin embargo, puede incluir una expresión CASE dentro de ORDER BY para crear un orden completamente personalizado, uno que ninguna columna individual podría producir por sí sola.
Esta técnica resulta muy útil cuando las reglas de negocio determinan la prioridad, en lugar de los valores sin procesar de los datos.
SELECT product_name, status
FROM products
ORDER BY
CASE status
WHEN 'urgent' THEN 1
WHEN 'active' THEN 2
WHEN 'pending' THEN 3
ELSE 4
END;Cómo funciona CASE dentro de ORDER BY
Cuando la base de datos evalúa ORDER BY CASE ... END, calcula un entero (o cualquier valor comparable) para cada fila. Después, las filas se ordenan según ese valor calculado, en lugar de una columna sin procesar o además de ella.
La expresión CASE no se almacena; solo existe durante la ejecución de la consulta.
SELECT order_id, priority
FROM orders
ORDER BY
CASE priority
WHEN 'high' THEN 1
WHEN 'medium' THEN 2
WHEN 'low' THEN 3
ELSE 9
END,
order_id;Ordenar los NULL explícitamente
De forma predeterminada, las distintas bases de datos colocan los NULL al principio o al final de un resultado ordenado de maneras diferentes. Un CASE en ORDER BY le permite decidir exactamente dónde aparecen los NULL, independientemente del motor de base de datos.
SELECT employee_name, manager_id
FROM employees
ORDER BY
CASE WHEN manager_id IS NULL THEN 0 ELSE 1 END,
manager_id;Orden ascendente y descendente condicional
Un CASE en ORDER BY también puede simular una dirección condicional. Al asignar valores negativos a las categorías, puede invertir eficazmente el orden para grupos específicos y mantener el orden normal para los demás.
Esto resulta útil cuando distintos tipos de filas necesitan una lógica de ordenación diferente dentro de un mismo conjunto de resultados.
SELECT task_name, due_date, is_overdue
FROM tasks
ORDER BY
CASE WHEN is_overdue = 1 THEN 0 ELSE 1 END,
due_date;CASE dentro de COUNT
Puede incluir una expresión CASE dentro de una función de agregación como COUNT. El truco consiste en devolver un valor no NULL para las filas que desea contar y NULL para las que desea omitir, ya que COUNT ignora los NULL.
SELECT
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count,
COUNT(CASE WHEN status = 'inactive' THEN 1 END) AS inactive_count
FROM users;CASE dentro de SUM: totales condicionales
Colocar CASE dentro de SUM permite sumar valores solo cuando una condición es verdadera y tratar las filas que no coinciden como cero. Este es un patrón muy habitual en informes de tipo tabla dinámica que dividen una sola columna en varias columnas de métricas.
SELECT
SUM(CASE WHEN region = 'North' THEN sales_amount ELSE 0 END) AS north_total,
SUM(CASE WHEN region = 'South' THEN sales_amount ELSE 0 END) AS south_total,
SUM(CASE WHEN region = 'East' THEN sales_amount ELSE 0 END) AS east_total
FROM sales;AVG condicional con CASE
El mismo patrón funciona con AVG. Como AVG ignora los NULL, devolver NULL para las filas que desea excluir produce el promedio únicamente de las filas coincidentes, sin necesidad de una subconsulta.
SELECT
AVG(CASE WHEN department = 'Engineering' THEN salary END) AS avg_eng_salary,
AVG(CASE WHEN department = 'Marketing' THEN salary END) AS avg_mkt_salary
FROM employees;Agrupar con CASE: categorizar filas
Puede usar CASE en la lista de GROUP BY o de SELECT para agrupar valores continuos en categorías y, después, agregar cada categoría. Esto convierte una columna numérica en grupos etiquetados sin modificar los datos subyacentes.
SELECT
CASE
WHEN age < 18 THEN 'Under 18'
WHEN age BETWEEN 18 AND 35 THEN '18-35'
WHEN age BETWEEN 36 AND 55 THEN '36-55'
ELSE '56+'
END AS age_group,
COUNT(*) AS user_count
FROM users
GROUP BY
CASE
WHEN age < 18 THEN 'Under 18'
WHEN age BETWEEN 18 AND 35 THEN '18-35'
WHEN age BETWEEN 36 AND 55 THEN '36-55'
ELSE '56+'
END;Usar un alias en lugar de repetir CASE
Repetir una expresión CASE larga tanto en SELECT como en GROUP BY resulta verboso. Algunas bases de datos (MySQL y PostgreSQL con ciertas soluciones alternativas) permiten hacer referencia al alias en ORDER BY, pero no en GROUP BY. El enfoque portátil más seguro consiste en envolver la consulta en una subconsulta o CTE y usar GROUP BY con el alias desde allí.
WITH scored AS (
SELECT
customer_id,
CASE
WHEN total_spent >= 1000 THEN 'Gold'
WHEN total_spent >= 500 THEN 'Silver'
ELSE 'Bronze'
END AS tier
FROM customers
)
SELECT tier, COUNT(*) AS customer_count
FROM scored
GROUP BY tier
ORDER BY
CASE tier
WHEN 'Gold' THEN 1
WHEN 'Silver' THEN 2
ELSE 3
END;Combinar ORDER BY CASE con ASC / DESC
Después de la expresión CASE, todavía puede añadir ASC o DESC y agregar más columnas de ordenación separadas por comas. La puntuación de CASE es solo la primera clave de ordenación; las columnas posteriores resuelven los empates de la forma habitual.
SELECT
ticket_id,
category,
created_at
FROM support_tickets
ORDER BY
CASE category
WHEN 'billing' THEN 1
WHEN 'outage' THEN 2
WHEN 'feature' THEN 3
ELSE 4
END ASC,
created_at ASC;Ejemplo del mundo real — Panel de ventas
Aquí tiene una consulta realista que combina una agregación basada en CASE con una ordenación basada en CASE. Genera un resumen de ventas por región ordenado de modo que la región con mayores ingresos aparezca siempre primero y 'Other' quede al final.
SELECT
CASE
WHEN region IN ('North', 'South', 'East', 'West') THEN region
ELSE 'Other'
END AS region_label,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sales,
COUNT(CASE WHEN status = 'refunded' THEN 1 END) AS refund_count
FROM orders
GROUP BY
CASE
WHEN region IN ('North', 'South', 'East', 'West') THEN region
ELSE 'Other'
END
ORDER BY completed_sales DESC;Comprobación de conocimientos
Compruebe cuánto ha entendido sobre el uso de CASE dentro de ORDER BY y de las funciones de agregación.
Resumen de la lección
En esta lección ha aprendido a combinar CASE con ORDER BY y las funciones de agregación:
- CASE en ORDER BY — asignar puntuaciones de ordenación personalizadas a las filas, controlar dónde aparecen los valores NULL y combinar varias reglas de ordenación en una sola consulta.
- CASE en COUNT — devolver un valor que no sea NULL para incluir las filas y NULL, de forma implícita o explícita, para omitirlas.
- CASE en SUM / AVG — usar 0 o NULL como valor de ELSE para obtener totales y promedios condicionales en una sola pasada.
- CASE en GROUP BY — agrupar valores continuos o categóricos en grupos etiquetados para realizar agregaciones.
Estos patrones eliminan muchas subconsultas y facilitan la escritura de informes con formato de tabla dinámica usando SQL estándar.
Aprende SQL con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 46
- Lecciones
- 183
Preguntas frecuentes
¿La lección «CASE en ORDER BY y agregaciones» es gratis?
Sí — el texto completo de «CASE en ORDER BY y agregaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «CASE en ORDER BY y agregaciones»?
Ordenación y recuento condicionales Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «CASE en ORDER BY y agregaciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La expresión CASE
- CASE buscado frente a CASE simple
- Agrupación y etiquetado de datos
- CASE en ORDER BY y agregaciones