ORDER BY organiza tus resultados en un orden específico, y GROUP BY agrupa filas para que puedas hacer cálculos de resumen sobre cada grupo.
Cuando los datos no tienen orden, son difíciles de leer
Imagina que eres analista en Liverpool y tu jefe te pide la lista de ventas del mes. La base de datos te regresa 500 filas en orden aleatorio. Nadie puede leer eso. Necesitas una forma de organizar esa información antes de presentarla.
Eso es exactamente lo que resuelven ORDER BY y GROUP BY. Son como las dos herramientas de organización más útiles de SQL: una acomoda, la otra resume.
El sistema ORDEN-RESUMEN
Puedes pensar en estas dos cláusulas como un sistema de dos pasos:
- ORDEN: Usa
ORDER BYpara acomodar filas de mayor a menor, de menor a mayor, o de A a Z. - RESUMEN: Usa
GROUP BYpara juntar filas similares y calcular totales, promedios o conteos.
Ambas van al final de tu consulta SELECT, después del WHERE si lo hay.
¿Cómo funciona ORDER BY?
ORDER BY le dice a SQL en qué columna basar el orden y en qué dirección.
Estructura básica:
SELECT columna1, columna2
FROM tabla
ORDER BY columna1 ASC;
ASCsignifica ascendente: de menor a mayor, o de A a Z. Es el valor por defecto.DESCsignifica descendente: de mayor a menor, o de Z a A.
Ejemplo 1: Productos de Bimbo ordenados por precio
Supón que tienes una tabla productos con columnas nombre y precio.
SELECT nombre, precio
FROM productos
ORDER BY precio DESC;
Resultado esperado:
nombre precio
------------------ -------
Pastel de chocolate $85
Donitas Bimbo $32
Pan de caja blanco $28
Mantecadas $22
El producto más caro aparece primero. Así puedes identificar rápidamente tus artículos de mayor valor.
Ejemplo 2: Clientes de Mercado Libre ordenados por nombre
SELECT nombre, ciudad
FROM clientes
ORDER BY nombre ASC;
Esto regresa la lista en orden alfabético. Útil para buscar un cliente específico en una tabla grande.
Ordenar por más de una columna
Puedes ordenar por varias columnas al mismo tiempo. SQL primero ordena por la primera columna. Si hay empates, usa la segunda.
SELECT nombre, ciudad, ventas_totales
FROM vendedores
ORDER BY ciudad ASC, ventas_totales DESC;
Aquí los vendedores se agrupan por ciudad (A a Z) y dentro de cada ciudad aparecen de mayor a menor según sus ventas. Perfecto para comparar el desempeño por sucursal en una empresa como FEMSA.
¿Cómo funciona GROUP BY?
GROUP BY toma filas que tienen el mismo valor en una columna y las convierte en una sola fila de resumen.
Pero ojo: no puedes poner cualquier columna en el SELECT cuando usas GROUP BY. Solo puedes usar:
- Las columnas que aparecen en el
GROUP BY. - Funciones de agregación como
COUNT(),SUM(),AVG(),MAX()oMIN().
Estructura básica:
SELECT columna_grupo, FUNCION(columna_calculo)
FROM tabla
GROUP BY columna_grupo;
Funciones de agregación más usadas
| Función | ¿Qué hace? |
|---|---|
COUNT() |
Cuenta cuántas filas hay |
SUM() |
Suma los valores de una columna |
AVG() |
Calcula el promedio |
MAX() |
Regresa el valor más alto |
MIN() |
Regresa el valor más bajo |
Ejemplo 3: Total de ventas por categoría en Liverpool
Tienes una tabla ventas con columnas categoria y monto.
SELECT categoria, SUM(monto) AS total_ventas
FROM ventas
GROUP BY categoria;
Resultado esperado:
categoria total_ventas
-------------- ------------
Electrónica $1,250,000
Ropa $890,500
Hogar $430,200
Juguetes $215,800
Con una sola consulta ves cuánto vendió cada categoría. Sin GROUP BY tendrías que sumar a mano cientos de filas.
Ejemplo 4: Número de empleados por departamento en FEMSA
SELECT departamento, COUNT(*) AS num_empleados
FROM empleados
GROUP BY departamento;
Resultado esperado:
departamento num_empleados
-------------- -------------
Logística 142
Ventas 98
Finanzas 45
RRHH 23
COUNT(*) cuenta todas las filas de cada grupo. Así sabes cuántas personas trabajan en cada área.
Combinar GROUP BY con ORDER BY
Esta es la combinación más poderosa. Primero agrupas y calculas, luego ordenas el resultado.
Ejemplo 5: Ventas por ciudad, de mayor a menor
SELECT ciudad, SUM(monto) AS total
FROM ventas
GROUP BY ciudad
ORDER BY total DESC;
Resultado esperado:
ciudad total
-------------- ----------
CDMX $3,500,000
Monterrey $2,100,000
Guadalajara $1,800,000
Puebla $950,000
Ahora ves de un vistazo qué ciudad genera más ingresos. Este tipo de reporte es lo que los gerentes de Mercado Libre o Bimbo piden todos los días.
El orden correcto de las cláusulas
SQL exige que escribas las cláusulas en este orden específico:
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ...;
Si las pones en otro orden, obtendrás un error. Memoriza este orden como una regla fija.
Errores comunes al usar ORDER BY y GROUP BY
Error 1: Seleccionar columnas que no están en GROUP BY
Este es el error más frecuente entre principiantes.
-- INCORRECTO
SELECT nombre, departamento, SUM(salario)
FROM empleados
GROUP BY departamento;
El problema es nombre: no está en el GROUP BY ni es una función de agregación. SQL no sabe qué nombre mostrar cuando agrupa varios empleados del mismo departamento.
-- CORRECTO
SELECT departamento, SUM(salario) AS total_salarios
FROM empleados
GROUP BY departamento;
Error 2: Olvidar el alias con AS
Cuando usas SUM() o COUNT(), el nombre de la columna en el resultado se ve feo: SUM(monto). Usa AS para darle un nombre claro.
-- Sin alias (resultado confuso)
SELECT categoria, SUM(monto)
FROM ventas
GROUP BY categoria;
-- Con alias (resultado claro)
SELECT categoria, SUM(monto) AS total_ventas
FROM ventas
GROUP BY categoria;
Error 3: Confundir WHERE con HAVING
WHERE filtra filas antes de agrupar. Si quieres filtrar después de agrupar, necesitas HAVING. Por ejemplo, si solo quieres ver categorías con más de $500,000 en ventas:
SELECT categoria, SUM(monto) AS total_ventas
FROM ventas
GROUP BY categoria
HAVING SUM(monto) > 500000
ORDER BY total_ventas DESC;
HAVING es el filtro que trabaja sobre grupos ya calculados. Es un tema que verás más adelante, pero conviene conocer su existencia desde ahora.
Cómo aplicar esto hoy mismo
Si estás practicando con una base de datos propia o de ejercicio, sigue estos pasos:
- Elige una tabla con datos repetidos en alguna columna (ciudad, categoría, departamento).
- Escribe un
SELECTconGROUP BYen esa columna y agregaCOUNT(*)oSUM(). - Agrega
ORDER BYal final para ordenar el resultado de mayor a menor. - Lee el resultado y pregúntate: ¿esto me dice algo útil sobre los datos?
Ese ciclo de cuatro pasos es el núcleo de cualquier reporte de negocios en SQL.
Quien sabe ordenar y agrupar datos en SQL puede convertir una tabla de miles de filas en una decisión de negocio en segundos.