Creando informes básicos
Antes de liarnos con la sintaxis de SQL y las variables, recuerda: las funciones agregadas son tus mejores colegas para contar de todo. Te ayudan a calcular datos totales, promedios y hacer magia con grandes cantidades de filas.
Las funciones agregadas se usan para hacer operaciones matemáticas sobre grupos de filas. Las principales son:
SUM(): suma los valores.AVG(): calcula el valor promedio.COUNT(): cuenta el número de filas en el resultado.
Las funciones agregadas son útiles cuando trabajas con grandes volúmenes de datos y quieres un informe resumido: cuántos pedidos tienes, cuál es el volumen total, o cuál fue el ticket más alto de hoy. Vamos a ver algunas funciones agregadas.
Contando filas: función COUNT()
La función COUNT() te permite contar el número de filas en una tabla. Vamos a ver cómo funciona con ejemplos.
-- Conteo simple de todas las filas en la tabla de pedidos
SELECT COUNT(*) AS total_orders
FROM orders;
-- Conteo de clientes únicos
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;
-- Conteo de pedidos con importe mayor que 100
SELECT COUNT(*) AS high_value_orders
FROM orders
WHERE total_amount > 100;
La función COUNT() se usa mucho para contar registros, valores únicos, y también junto con filtros, por ejemplo, "cuántos estudiantes se han apuntado a cursos de Python".
Sumando datos: función SUM()
La función SUM() calcula la suma de los valores en una columna. Ahora vamos a sumar todas las compras de los clientes.
-- Suma total de ingresos
SELECT SUM(total_amount) AS total_revenue
FROM orders;
-- Suma de compras de un cliente concreto
SELECT SUM(total_amount) AS customer_spending
FROM orders
WHERE customer_id = 101;
-- Suma de pedidos por categorías
SELECT category, SUM(total_amount) AS category_revenue
FROM orders
GROUP BY category;
SUM() es la herramienta principal para analizar ventas, ingresos y cualquier otra suma. ¿Por ejemplo, necesitas saber los ingresos de un centro de negocios el mes pasado? Fácil.
Valores promedio: función AVG()
La función AVG() te ayuda a calcular el valor promedio de un conjunto de datos. Por ejemplo, la nota media de los estudiantes o el ticket promedio de un cliente.
-- Importe promedio de pedido
SELECT AVG(total_amount) AS average_order_value
FROM orders;
-- Importe promedio de pedidos por categorías
SELECT category, AVG(total_amount) AS average_order_value
FROM orders
GROUP BY category;
-- Ticket promedio de clientes en los últimos 7 días
SELECT AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
El valor promedio es útil para analizar la calidad del servicio, detectar anomalías y calcular métricas clave, como el beneficio medio por cliente.
Usando funciones agregadas en analítica
Ahora que ya conocemos las funciones principales, vamos a ver cómo usarlas para crear informes analíticos básicos.
Ejemplo 1: ingresos totales y número de pedidos
Supón que quieres saber cuántos pedidos se han hecho y cuál es el ingreso total del mes.
SELECT
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';
Ejemplo 2: ingreso promedio por categorías
¿Y si queremos dividir los ingresos por categorías de productos?
SELECT
category,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY category;
Ejemplo 3: pedidos de los últimos 7 días
A menudo hay que analizar métricas en periodos cortos, como la última semana.
SELECT
COUNT(*) AS orders_last_week,
SUM(total_amount) AS revenue_last_week,
AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Casos prácticos con tareas concretas
Tarea: Análisis de ventas por regiones
Supón que eres dueño de una cadena de tiendas y quieres analizar cómo se han distribuido los ingresos por regiones.
SELECT
region,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS average_order_value
FROM orders
GROUP BY region
ORDER BY total_revenue DESC;
Tarea: Top-10 clientes por ingresos
Ahora vamos a añadir un poco de lógica para sacar el top-10 de clientes por suma total de pedidos.
SELECT
customer_id,
SUM(total_amount) AS total_spending
FROM orders
GROUP BY customer_id
ORDER BY total_spending DESC
LIMIT 10;
Tarea: Comparando ingresos por días de la semana
¿Quieres saber en qué días de la semana tu negocio gana más? Aquí tienes un ejemplo:
SELECT
TO_CHAR(order_date, 'Day') AS day_of_week,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY total_revenue DESC;
GO TO FULL VERSION