Agregaciones con GROUP BY, y subconsultas.
Un GROUP BY colapsa filas que comparten un valor en común y aplica una función de agregación (COUNT, SUM, AVG, MIN, MAX) a cada grupo. Es como “contar por categoría” en una hoja de cálculo, pero con poder real.
01Las cinco agregaciones
02Anatomía
SELECT categoria, COUNT(*) AS cuantos, AVG(precio) AS promedio FROM productos GROUP BY categoria HAVING COUNT(*) > 1 ORDER BY promedio DESC;
- Las columnas que no son agregaciones deben estar en el
GROUP BY. HAVINGfiltra grupos (después de agregar).WHEREfiltra filas (antes).ASrenombra el resultado — útil para que la columna no se llameCOUNT(*).
03Subconsultas — un SELECT dentro de otro
-- Productos más caros que el promedio SELECT nombre, precio FROM productos WHERE precio > (SELECT AVG(precio) FROM productos);
El motor evalúa la subconsulta primero (un valor escalar: el promedio) y después la usa como si fuera un número literal. Las subconsultas también pueden aparecer en FROM (tabla derivada) o con IN.
04Laboratorio · agrupa y analiza
SELECT categoria, COUNT(*) AS items, AVG(precio) AS promedio, MAX(precio) AS maximo FROM productos GROUP BY categoria ORDER BY promedio DESC;
| idINT🔑 | nombreVARCHAR(60) | categoriaVARCHAR(30) | precioDECIMAL(10,2) | stockINT |
|---|---|---|---|---|
| 1 | Café Sierra | Café | 32000 | 18 |
| 2 | Café Huila | Café | 28000 | 25 |
| 3 | Café Tolima | Café | 30000 | 6 |
| 4 | Té verde | Té | 12000 | 12 |
| 5 | Té manzanilla | Té | 9500 | 30 |
| 6 | Galletas | Snack | 6000 | 4 |
| 7 | Chocolate | Snack | 22000 | 8 |
| 8 | Azúcar | Despensa | 4500 | 25 |
| 9 | Panela | Despensa | 3200 | 40 |
| 10 | Cacao | Despensa | 15000 | 11 |
Si una columna aparece en SELECT pero no es una agregación, tiene que estar en GROUP BY. Si no la pones, te quedas con un valor cualquiera del grupo.
05Desafíos · ponete a prueba
Tres retos de agregación, de menor a mayor dificultad. Escribí tu consulta y dale Comprobar.
Contá cuántos productos hay en cada categoría. Mostrá la columna 'categoria' y la columna 'total' con el conteo. El orden no importa.
Calculá el stock total disponible por categoría. Mostrá 'categoria' y 'stock_total', ordenados de mayor a menor stock.
Encontrá las categorías cuyo precio promedio supera los 15 000. Mostrá 'categoria' y 'precio_promedio'. El orden no importa.