¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Contar y sumar por grupos

Después de esta lección: Puedo contar y sumar filas por grupos.

Lección de 45 minSin comandos

La reunión del lunes

Cada lunes, la gerente de Café Turia hace dos preguntas. ¿Cuántos pedidos tuvimos en cada ciudad? ¿Cuánto dinero dejó cada una?

Hasta ahora alguien copiaba los pedidos a una hoja de cálculo y sumaba a mano. Tardaba una hora y a veces se equivocaba. Una sola consulta da las dos respuestas en un segundo.

Al final de esta lección

Nota

Puedo contar y sumar filas por grupos.

Palabras clave

PalabraQué significaEjemplo
ORDER BYordena las filas por una columnaORDER BY amount DESC
COUNTcuenta filas
SUMsuma los valores de una columna
GROUP BYhace un grupo por cada valor distinto
Aliasun nombre que das a una columna del resultadoAS total

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

ORDER BY decide el orden

Sin ORDER BY, la base de datos devuelve las filas en el orden que le resulta cómodo. No cuentes con ese orden.

ORDER BY amount ordena de menor a mayor. Si añades DESC, ordena de mayor a menor.

LIMIT 3 se queda con las tres primeras filas. Juntos responden a «¿cuáles son los tres pedidos más grandes?».

Prueba: los pedidos más grandes

Código: sql
-- Los pedidos del más caro al más barato.
SELECT customer, amount
FROM orders
ORDER BY amount DESC;

-- Solo los tres primeros.
SELECT customer, amount
FROM orders
ORDER BY amount DESC
LIMIT 3;

COUNT cuenta y SUM suma

COUNT(*) cuenta cuántas filas hay. SUM(amount) suma los importes de esas filas.

Las dos funciones resumen muchas filas en un solo número. Si pones un WHERE, solo resumen las filas que pasan la condición.

AS total pone nombre a la columna del resultado. Así el informe se lee mejor.

Prueba: contar y sumar

Código: sql
-- Cuántos pedidos hay y cuánto suman.
SELECT COUNT(*) AS num_orders, SUM(amount) AS total
FROM orders;

-- Lo mismo, solo con los pedidos pagados.
SELECT COUNT(*) AS num_orders, SUM(amount) AS total
FROM orders
WHERE status = 'pagado';

Un error frecuente

Advertencia

Mucha gente cree que COUNT(amount) suma los importes. No los suma: cuenta cuántas filas tienen importe. Si quieres euros, usa SUM. Si quieres cuántos pedidos, usa COUNT.

GROUP BY hace un resumen por grupo

GROUP BY city reparte las filas en montones, uno por ciudad. Después, COUNT y SUM trabajan dentro de cada montón.

El resultado tiene una fila por ciudad, no una por pedido. Es la tabla que la gerente quiere ver el lunes.

Prueba: un total por ciudad

Código: sql
-- Un grupo por ciudad: cuántos pedidos y cuánto suman.
SELECT city, COUNT(*) AS num_orders, SUM(amount) AS total
FROM orders
GROUP BY city
ORDER BY total DESC;

-- Cambia city por status en las dos líneas y vuelve a ejecutar.

Ejemplo: el grupo de Valencia, paso a paso

PedidoClienteImporte
1Lucía Romero42 €
4Andrés Navarro120 €
8Sergio Molina58 €
COUNT(*)3 pedidos
SUM(amount)42 + 120 + 58 = 220 €

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.