Funciones de agregación y agrupación en SQL

Las funciones de agregación de SQL ayudan a obtener resultados a partir de los datos de una tabla. Por ejemplo, puedes contar productos, encontrar su precio medio o sumar los precios de los productos de un surtido.

COUNT cuenta filas, SUM suma valores, AVG calcula la media, y MIN y MAX encuentran el mínimo y el máximo.

En los ejemplos usaremos la tabla de caramelos candy. El campo price contiene el precio y filling indica si el caramelo tiene relleno.

id name filling price
1 Plutonian Praline true 30
2 Explosive Comet true 60
3 Universal Harmony false 20
4 Pluto's Tears false 40
5 Mint Vortex false 40
7 Plutonic Cream false 70
10 Pluto Mystery true 90

Tabla candy

COUNT — contar filas

Al activar «Con relleno», el catálogo muestra tres artículos. Comprueba cuántos hay y cuántos tienen precio.

COUNT(*) Cuenta todas las filas que pasan el filtro.
COUNT(price) Cuenta las filas que tienen un precio.

AS asigna un nombre a la columna del resultado. Aquí, candies indica cuántos caramelos hay y prices cuántos tienen un precio registrado.

SELECT COUNT(*) AS candies,
       COUNT(price) AS prices
FROM candy
WHERE filling = true;
candies prices
3 3

Los tres caramelos con relleno tienen precio. Si quitas WHERE, el recuento incluye los siete artículos del catálogo.

SUM, AVG, MIN y MAX — comprobar precios

Calculemos la suma de los precios de los caramelos con relleno, así como el precio medio, mínimo y máximo.

SUM Suma los precios de los caramelos seleccionados.
AVG Calcula la media aritmética de los precios.
MIN Busca el precio más bajo.
MAX Busca el precio más alto.
SELECT SUM(price) AS total,
       AVG(price) AS mean_price,
       MIN(price) AS lowest,
       MAX(price) AS highest
FROM candy
WHERE filling = true;
total mean_price lowest highest
180 60 30 90

Los tres precios son 30, 60 y 90. Suman 180 y la media es 180 / 3 = 60 por caramelo. El precio más bajo es 30 y el más alto es 90.

Agrupar con GROUP BY

El informe muestra dos totales, uno para los caramelos con relleno y otro para los caramelos sin relleno. Agrupa las filas por filling para comprobar ambos con una consulta.

GROUP BY reúne las filas que tienen el mismo valor en un campo. SUM calcula un total para cada grupo. La columna filling del resultado identifica el grupo.

En este ejemplo, filling aparece dos veces. En GROUP BY separa los caramelos según tengan relleno o no, y en SELECT muestra a qué grupo corresponde cada suma.

SELECT filling, SUM(price) AS total
FROM candy
GROUP BY filling;
filling total
true 180
false 170

Las tres variedades con relleno suman 180 y las cuatro sin relleno suman 170. La suma de las dos filas del informe debe coincidir con el total del catálogo.

Filtrar grupos con HAVING

Busca caramelos que coincidan tanto en el precio como en la presencia de relleno. Devuelve solo las combinaciones que aparezcan más de una vez.

Escribe los dos campos en GROUP BY separados por una coma. Cada grupo corresponde a una combinación de filling y price. COUNT(*) indica cuántas filas contiene.

HAVING filtra los grupos según una condición. En este ejemplo, conserva solo los grupos que contengan dos o más caramelos.

SELECT filling, price, COUNT(*) AS qty
FROM candy
GROUP BY filling, price
HAVING COUNT(*) > 1;
filling price qty
false 40 2

Pluto's Tears y Mint Vortex cuestan 40 y ninguno tiene relleno. Cada una de las demás combinaciones aparece una sola vez.

WHERE filtra filas antes de agruparlas. HAVING filtra los grupos después de calcular sus totales.

WHERE COUNT(*) > 1 da error porque al filtrar las filas todavía se desconoce el tamaño del grupo. Usa WHERE price > 40 para comprobar el precio de cada caramelo o HAVING AVG(price) > 40 para comprobar la media de cada grupo.

Tarea

La tienda prepara surtidos de caramelos. Comprueba cómo se calcula su precio usando la tabla candy.

Reglas para preparar los surtidos:

  • Los caramelos con relleno y sin relleno se agrupan en surtidos separados.
  • En cada surtido solo se incluyen caramelos con un precio entre 30 y 70, ambos incluidos.
  • Un surtido puede ponerse a la venta si contiene al menos tres caramelos.

Escribe una consulta SQL que calcule el precio del surtido que puede ponerse a la venta.

tester_today Base de datos de práctica
⌘ / Ctrl + Enter
Resultado de la consulta
Listo para ejecutar
¡Tarea disponible para usuarios premium!

Desbloquea el acceso para aprender sin límites.

Acceso completo a todas las tareas prácticas
Verificación de respuestas
Intentos ilimitados