Proyectos de Análisis de Datos con SQL

Consultas SQL enfocadas en análisis de datos, inteligencia de negocios y exploración de conjuntos de datos. Todas incluyen técnicas como agregaciones, joins, subconsultas y funciones analíticas.

Tecnologías: MySQL - SQL Server - PostgreSQL

Consulta 1 — Ventas por Región

Devuelve el total de ventas agrupadas por región, incluyendo el promedio por vendedor.
SELECT region,
       SUM(sales) AS total_sales,
       AVG(sales) AS average_sales
FROM sales
WHERE date >= '2025-01-01'
GROUP BY region
ORDER BY total_sales DESC;

Consulta 2 — Top 5 Productos Más Vendidos

Selecciona los 5 productos con mayor cantidad vendida en el último trimestre.
SELECT TOP 5 product,
       SUM(quantity) AS total_sold
FROM sales
WHERE date BETWEEN '2025-07-01' AND '2025-09-30'
GROUP BY product
ORDER BY total_sold DESC;
    

Consulta 3 — Ventas por País

Recupera el total de ventas agrupadas por país.
SELECT c.country,
       SUM(o.total_amount) AS sales_by_country
FROM customers c
JOIN orders o ON o.customer_id = c.customer_id
GROUP BY c.country
ORDER BY sales_by_country DESC;
    

Consulta 4 — Productos Más Vendidos

Lista los productos con mayor cantidad vendida.
SELECT p.product_name,
       SUM(oi.quantity) AS units_sold
FROM order_items oi
JOIN products p ON p.product_id = oi.product_id
GROUP BY p.product_name
ORDER BY units_sold DESC;
    

Consulta 5 — Ticket Promedio por Mes

Calcula el ticket promedio mensual.
SELECT
       DATE_FORMAT(order_date, '%Y-%m') AS month,
       AVG(total_amount) AS average_ticket
FROM orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
ORDER BY month DESC;
    

Consulta 6 — Ranking de Clientes

Ranking de clientes según el monto total gastado (funciones de ventana).
SELECT customer_id,
       SUM(total_amount) AS total_spent,
       RANK() OVER (ORDER BY SUM(total_amount) DESC) AS ranking
FROM orders
GROUP BY customer_id;
    

Consulta 7 — Categoría con Mayor Ingreso

Determina qué categoría de productos genera más ingresos.
SELECT p.category,
       SUM(oi.quantity * oi.item_price) AS revenue
FROM order_items oi
JOIN products p ON p.product_id = oi.product_id
GROUP BY p.category
ORDER BY revenue DESC;
    

Consulta 8 — Promedio Móvil de 7 Días

Calcula un promedio móvil de 7 días del total de ventas.
SELECT order_date,
       total_amount,
       AVG(total_amount) OVER (
         ORDER BY order_date
         ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
       ) AS moving_avg_7d
FROM orders;
    

Consulta 9 — Clientes sin Compras

Identifica clientes sin compras, útil para análisis de churn y retención.
SELECT c.customer_id,
       c.customer_name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.customer_id
WHERE o.order_id IS NULL;
    

Consulta 10 — Clasificación de Productos

Asigna una categoría según el precio del producto.
SELECT product_name,
       price,
       CASE
            WHEN price >= 100 THEN 'High'
            WHEN price >= 50  THEN 'Medium'
            ELSE 'Low'
       END AS price_category
FROM products;