Ejercicios Resueltos de Consultas SQL Avanzadas: Joins, Agregaciones y Subconsultas

Clasificado en Diseño e Ingeniería

Escrito el en español con un tamaño de 2,5 KB

Resolución de Consultas SQL

b) Cantidad de empleados por oficina

Listado que muestra la cantidad de empleados que hay en cada oficina que tenga más de 2 empleados.

SELECT CodigoOficina, COUNT(*) AS empleados
FROM Empleados
GROUP BY CodigoOficina
HAVING COUNT(*) > 2;

c) Cantidad total vendida del producto más caro

Cálculo de la suma total de ventas para el producto con el precio más elevado.

SELECT SUM(dp.Cantidad * dp.PrecioUnidad) AS total
FROM DetallePedido dp, Productos pr
WHERE dp.CodigoProducto = pr.CodigoProducto
AND pr.PrecioVenta = (SELECT MAX(PrecioVenta) FROM Productos);

e) Información de clientes y representantes en San Francisco

Listado que muestra el nombre de los clientes, su teléfono, el nombre de su empleado representante de ventas y el teléfono de la oficina del representante. Filtrado para clientes de USA cuya oficina esté en la ciudad de San Francisco.

SELECT c.NombreCliente, c.Telefono, e.Nombre, o.Telefono
FROM Clientes c, Empleados e, Oficinas o
WHERE c.CodigoEmpleadoRepVentas = e.CodigoEmpleado
AND c.CodigoOficina = o.CodigoOficina
AND c.Pais = 'USA'
AND o.Ciudad = 'San Francisco';

f) Listado de empleados y código postal de su oficina

Listado con el nombre de todos los empleados, indicando para cada uno de ellos el código postal de su oficina. Si algún empleado no tiene oficina, se mostrará 'no tiene' en lugar del código postal.

SELECT e.Nombre,
IFNULL(o.CodigoPostal, 'no tiene') AS codigo_postal
FROM Empleados e
LEFT JOIN Oficinas o
ON e.CodigoOficina = o.CodigoOficina;

g) Clientes con pagos superiores a la media

Código de los clientes y cantidad total pagada por cada uno, filtrando solo aquellos clientes que han pagado más que la media.

SELECT CodigoCliente, SUM(Cantidad) AS total
FROM Pagos
GROUP BY CodigoCliente
HAVING SUM(Cantidad) >
(
SELECT AVG(Cantidad) FROM Pagos
);

h) Total pagado por clientes con representante en Madrid

Cantidad total pagada por cada cliente cuyo representante de ventas tiene su oficina en Madrid.

SELECT c.CodigoCliente, SUM(p.Cantidad) AS total
FROM Clientes c, Pagos p, Empleados e, Oficinas o
WHERE c.CodigoCliente = p.CodigoCliente
AND c.CodigoEmpleadoRepVentas = e.CodigoEmpleado
AND e.CodigoOficina = o.CodigoOficina
AND o.Ciudad = 'Madrid'
GROUP BY c.CodigoCliente;

Entradas relacionadas: