Funciones de agregado
En SQL, las funciones de agregación se utilizan para realizar cálculos en un conjunto de filas y devolver un único valor resumen. Estas funciones se combinan comúnmente con la cláusula GROUP BY
, que agrupa las filas según los valores de una o más columnas. Aquí tienes una explicación detallada con ejemplos:
Funciones de Agregación Comunes:
-
COUNT:
- Devuelve el número de filas en un conjunto.
SELECT COUNT(*) FROM orders;
-
SUM:
- Devuelve la suma de los valores en una columna.
SELECT SUM(total_amount) FROM sales;
-
AVG:
- Devuelve el promedio de los valores en una columna.
SELECT AVG(salary) FROM employees;
-
MIN:
- Devuelve el valor mínimo en una columna.
SELECT MIN(price) FROM products;
-
MAX:
- Devuelve el valor máximo en una columna.
SELECT MAX(date) FROM transactions;
Agrupamiento con GROUP BY:
La cláusula GROUP BY
se utiliza para agrupar filas basadas en los valores de una o más columnas. Se combina comúnmente con funciones de agregación.
SELECT column1, column2, AGGREGATE_FUNCTION(column3)
FROM table
GROUP BY column1, column2;
Ejemplo:
Supongamos que tenemos una tabla de pedidos (orders
) con información sobre los productos pedidos, la cantidad y el cliente. Queremos calcular la cantidad total de productos pedidos por cada cliente.
SELECT customer_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY customer_id;
En este ejemplo, estamos utilizando la función de agregación SUM
para calcular la cantidad total (quantity
) de productos pedidos por cada cliente (customer_id
).
Las funciones de agregación y el agrupamiento son fundamentales para analizar datos de manera efectiva en SQL, permitiéndote obtener resúmenes útiles y realizar análisis a nivel de grupo.
Claro, aquí tienes cinco ejemplos de consultas con funciones de agregación y múltiples JOIN
en la base de datos Sakila, que es una base de datos de ejemplo de MySQL centrada en un sistema de alquiler de películas:
Ejemplo 1: Total de Ingresos por Cliente
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_amount
FROM customer c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
ORDER BY total_amount DESC;
Ejemplo 2: Películas Rentadas por Categoría
SELECT c.name AS category, COUNT(r.inventory_id) AS rentals_count
FROM category c
JOIN film_category fc ON c.category_id = fc.category_id
JOIN film f ON fc.film_id = f.film_id
JOIN inventory i ON f.film_id = i.film_id
JOIN rental r ON i.inventory_id = r.inventory_id
GROUP BY c.name
ORDER BY rentals_count DESC;
Ejemplo 3: Actores con Mayor Número de Películas
SELECT a.actor_id, a.first_name, a.last_name, COUNT(fa.film_id) AS film_count
FROM actor a
JOIN film_actor fa ON a.actor_id = fa.actor_id
GROUP BY a.actor_id, a.first_name, a.last_name
ORDER BY film_count DESC;
Ejemplo 4: Promedio de Duración de Películas por Categoría
SELECT c.name AS category, AVG(f.length) AS avg_duration
FROM category c
JOIN film_category fc ON c.category_id = fc.category_id
JOIN film f ON fc.film_id = f.film_id
GROUP BY c.name;
Ejemplo 5: Clientes con Mayor Gasto
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_amount
FROM customer c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
HAVING total_amount > 100
ORDER BY total_amount DESC;
Estos ejemplos ilustran cómo utilizar funciones de agregación como SUM
, COUNT
y AVG
, así como múltiples JOIN
para realizar consultas más complejas en la base de datos Sakila. Asegúrate de tener acceso a la base de datos Sakila y adaptar las consultas según sea necesario.