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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| ORDER BY | ordena las filas por una columna | ORDER BY amount DESC |
| COUNT | cuenta filas | |
| SUM | suma los valores de una columna | |
| GROUP BY | hace un grupo por cada valor distinto | |
| Alias | un nombre que das a una columna del resultado | AS 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
-- 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
-- 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
-- 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
| Pedido | Cliente | Importe |
|---|---|---|
| 1 | Lucía Romero | 42 € |
| 4 | Andrés Navarro | 120 € |
| 8 | Sergio Molina | 58 € |
| COUNT(*) | 3 pedidos | |
| SUM(amount) | 42 + 120 + 58 = 220 € |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.