Una función de agregación toma varias filas como entrada y devuelve un solo valor: un total, un promedio, un mínimo... La más sencilla es COUNT(*), que cuenta las filas. Se combina de forma natural con WHERE: la base de datos filtra primero y luego cuenta.
SQL
SELECT COUNT(*) FROM books;
SELECT COUNT(*) FROM books WHERE genre = 'sf';
7 libros en total, de los cuales 4 son de ciencia ficción
Las demás agregaciones esenciales se aplican a una columna: SUM(price) suma, AVG(price) calcula el promedio, MIN(year) y MAX(year) encuentran los valores más pequeño y más grande. La palabra clave AS asigna un alias, es decir, un nombre legible para la columna calculada.
SQL
SELECT SUM(price) AS total FROM books;
SELECT AVG(price) AS avg_sf
FROM books
WHERE genre = 'sf';
SELECT MIN(year), MAX(year) FROM books;
Total: 52.4; promedio sf: 8.375; 1888 y 1965
¿Y para obtener una estadística por categoría? Ese es el papel de GROUP BY: la base de datos agrupa las filas que comparten el mismo valor (aquí el género) y luego aplica la agregación a cada grupo. El resultado contiene una fila por grupo.
SQL
SELECT genre, COUNT(*) AS nb
FROM books
GROUP BY genre;
SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;
sf: 4 libros; aventure: 2; conte: 1
Prueba de conocimientos
Comprueba que has retenido los puntos clave de esta lección.
¿Qué devuelve SELECT COUNT(*) FROM books;?
El número de columnas de la tabla
El número de filas de la tabla
La lista de todos los libros
¿Qué función calcula el precio promedio de los libros?
SUM(price)
AVG(price)
MEAN(price)
MAX(price)
¿Qué produce SELECT genre, COUNT(*) FROM books GROUP BY genre;?
Una fila por libro, con su género
Una sola fila con el número total de libros
Una fila por género, con el número de libros de ese género