Obtener todos los clientes cuyo país sea 'Argentina'.
SELECT * FROM Clientes WHERE Pais = 'Argentina';
Listar OrdenItems con eñ Total esté entre 100 y 300.
SELECT * FROM OrdenItems WHERE Total BETWEEN 100 AND 300;
Obtener las 10 órdenes más recientes.
SELECT * FROM Ordenes ORDER BY Fecha DESC LIMIT 10;
Total de ventas por cliente.
SELECT ClienteID, SUM(Total) AS TotalVendido
FROM Ordenes
GROUP BY ClienteID;
Promedio de total por ItemID.
SELECT itemID, AVG(Total) AS TotalPromedio FROM OrdenItems GROUP BY itemID;
ItemID con ventas totales superiores a 200.
SELECT ItemID, SUM(Total) AS TotalVentas FROM ordenitems GROUP BY ItemID HAVING SUM(Total) > 200;
SELECT c.Nombre, o.Fecha, o.Total
FROM Clientes c
INNER JOIN Ordenes o ON c.ClienteID = o.ClienteID;
SELECT p.Nombre, d.Cantidad FROM Productos p LEFT JOIN ordenitems d ON p.ProductoID = d.ProductoID;
SELECT ProductoID, Stock
FROM inventarioA
UNION ALL
SELECT ProductoID, Stock
FROM inventarioB;
Productos más caros que el precio promedio.
SELECT *
FROM Productos
WHERE Precio > (SELECT AVG(Precio) FROM Productos);
Clientes que hicieron más de 5 órdenes.
SELECT ClienteID
FROM Ordenes
GROUP BY ClienteID
HAVING COUNT(*) > 5;
WITH VentasMensuales AS (
SELECT DATE_TRUNC('month', Fecha) AS Mes, SUM(Total) AS TotalMes
FROM Ordenes
GROUP BY DATE_TRUNC('month', Fecha)
)
SELECT * FROM VentasMensuales;
WITH RECURSIVE CategoriasCTE AS (
SELECT CategoriaID, Nombre, PadreID
FROM Categorias
WHERE PadreID IS NULL
UNION ALL
SELECT c.CategoriaID, c.Nombre, c.PadreID
FROM Categorias c
INNER JOIN CategoriasCTE cc ON c.PadreID = cc.CategoriaID
)
SELECT * FROM CategoriasCTE;
SELECT ProductoID, Precio,
RANK() OVER (ORDER BY Precio DESC) AS Posicion
FROM Productos;
SELECT Fecha, Total,
SUM(Total) OVER (ORDER BY Fecha) AS Acumulado
FROM Ordenes;
SELECT Fecha, Total,
Total - LAG(Total, 1) OVER (ORDER BY Fecha) AS Variacion
FROM Ordenes;
SELECT ClienteID,
SUM(CASE WHEN EXTRACT(month FROM Fecha)=1 THEN Total END) AS Enero,
SUM(CASE WHEN EXTRACT(month FROM Fecha)=2 THEN Total END) AS Febrero
FROM Ordenes
GROUP BY ClienteID;
SELECT Fecha,
LAG(Fecha) OVER (ORDER BY Fecha) AS FechaAnterior,
Fecha - LAG(Fecha) OVER (ORDER BY Fecha) AS Diferencia
FROM Ordenes;
Tablas modelo para todos los ejercicios: