> misión 5/8 · 25 min

Filtrar grupos

Mensaje de Rodrigo Henríquez, gerente comercial de Minimarkets del Sur

Vamos a negociar con proveedores y necesito saber qué productos vendieron 55 unidades o más en el trimestre. También quiero saber en qué locales el ticket promedio, lo que gasta un cliente por venta, supera los 6.000 pesos: ahí vamos a probar productos más caros.

Concepto

WHERE filtra filas antes de agrupar. Para filtrar grupos después de calcularlos se usa HAVING:

SELECT categoria, COUNT(*) AS productos FROM productos GROUP BY categoria HAVING COUNT(*) >= 5

El orden de las cláusulas siempre es el mismo:

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT …

Una forma de recordarlo: WHERE decide qué filas entran a los grupos y HAVING decide qué grupos salen en el resultado. En HAVING se repite la función de resumen: HAVING SUM(cantidad) >= 55.

> tarea SQL

Trae el id de cada producto (producto_id) y la suma de sus unidades vendidas, solo para los que vendieron 55 unidades o más.

Tablas disponibles
  • locales: id, nombre, ciudad, region, metros2
  • productos: id, nombre, categoria, precio, proveedor
  • ventas: id, fecha, local_id, producto_id, cantidad, monto, medio_pago

Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.

> tarea SQL

Trae el id de cada local y su ticket promedio redondeado a pesos, solo para los locales con un ticket promedio mayor a 6000.

Tablas disponibles
  • locales: id, nombre, ciudad, region, metros2
  • productos: id, nombre, categoria, precio, proveedor
  • ventas: id, fecha, local_id, producto_id, cantidad, monto, medio_pago

Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.

> decisión

Un compañero escribió WHERE SUM(cantidad) >= 55 y la base le respondió con un error. ¿Por qué?

Cargando opciones…

Aprueba las tareas de esta misión para ver el cierre.