Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-- Bloque 1
-- 1. Sacar el código de oficina y la ciudad donde hay oficinas
select CodigoOficina, ciudad from oficinas;
-- 2. Sacar cuántos empleados hay en la compañía
select count(CodigoEmpleado) from empleados;
-- 3. Sacar cuántos clientes tiene cada país
select pais, count(codigocliente) from clientes
group by pais;
-- 4. Sacar cuál fue el pago medio en 2005
select avg(Cantidad) from pagos
where FechaPago between '2008-01-01' and '2008-12-31' ;
describe pagos;
select * from pagos;
-- 5. Obtener el nombre del cliente con mayor límite de crédito
select nombrecliente, LimiteCredito from clientes
where LimiteCredito = (select max(LimiteCredito) from clientes);
-- 6. Obtener el nombre, apellido1 y cargo de los empleados que no representen a
ningún cliente
select e.nombre, concat(e.apellido1, ' ', e.apellido2) as Apellidos,
e.puesto, c.CodigoEmpleadoRepVentas from empleados as e
left join clientes as c
on CodigoEmpleadoRepVentas is null;
-- 7. Sacar un listado con el nombre de cada cliente y el nombre y apellido de su
representante de ventas
select c.nombrecliente, e.nombre, concat(e.apellido1, ' ', e.apellido2) as
Apellidos from empleados as e
inner join clientes as c
on c.CodigoEmpleadoRepVentas=e.codigoempleado;
-- 8. Mostrar el nombre de los clientes que no hayan realizado pagos junto con el
nombre de sus representantes de
-- ventas
describe pagos;
select * from empleados;
select * from pagos;
select nombreCliente from clientes
where CodigoEmpleadoRepVentas is null;
-- 9. Listar las ventas totales de los productos que hayan facturado más de 3000
euros. Se mostrará el nombre,
-- unidades vendidas, total facturado y total facturado con impuestos (21% IVA)
-- select * from detallepedidos;
select p.nombre, sum(dp.preciounidad*dp.cantidad) as facturado, sum(dp.cantidad) as
unidadesVendidas,
sum((dp.preciounidad*dp.cantidad)+((dp.preciounidad*dp.cantidad)*0.21)) as conIVA
from detallepedidos as dp inner join productos as p
on p.CodigoProducto=dp.CodigoProducto
group by p.nombre
having facturado>3000;
-- 10. Listar la dirección de las oficinas que tengan clientes en Fuenlabrada
select * from oficinas;
select * from empleados;
select * from clientes;
-- Bloque 2
-- 1. Sacar la ciudad y el teléfono de las oficinas de Estados Unidos
select ciudad, telefono from oficinas
where pais='EEUU';
-- 2. Sacar el nombre, los apellidos y el email de los empleados a cargo de Alberto
Soria
select nombre, concat(apellido1,' ',apellido2) as apellidos, email from empleados
where codigojefe in (select codigoempleado from empleados where puesto like
'Director General');
-- select count(*) from empleados where codigojefe=3;
-- select count(*) from (select nombre, concat(apellido1,' ',apellido2) as
apellidos, email from empleados
-- where codigojefe=(select codigoempleado from empleados where nombre='Alberto'
and apellido1='Soria')) as comp;
-- 12. Sacar la misma información que en la pregunta anterior, pero agrupada por
código de producto filtrada por los
-- códigos que empiecen por FR
-- Bloque 3
-- 1. Obtener el nombre del producto más caro
select nombre, PrecioVenta from productos
where precioventa = (select max(PrecioVenta) from productos);
-- 2. Obtener el nombre del producto del que más unidades se hayan vendido en un
mismo pedido
-- select * from productos;
-- 3. Obtener los clientes cuya línea de crédito sea mayor que los pagos que haya
realizado
describe clientes;
describe pagos;
-- 4. Sacar el producto que más unidades tiene en stock y el que menos unidades
tiene en stock
select nombre, CantidadEnStock from productos
where CantidadEnStock =(select min(CantidadEnStock) from productos)
or CantidadEnStock =(select max(CantidadEnStock) from productos);
-- select max(CantidadEnStock), min(CantidadEnStock) from productos;
-- select CantidadEnStock from productos;
-- Bloque 4
-- 1. Sacar el nombre de los clientes y el nombre de sus representantes junto con
la ciudad de la oficina a la que
-- pertenece el representante
select cli.nombrecliente, of.ciudad from clientes as cli
inner join empleados as em on em.codigoempleado=cli.codigoempleadorepventas
inner join oficinas as of on em.codigoOficina=of.codigoOficina;
-- 2. Sacar la misma información que en la pregunta anterior pero sólo los clientes
que no hayan hecho pagos
select * from detallepedidos;
select * from pagos;
-- Bloque5
-- 1. Sacar el número de clientes que tiene asignado cada representante de ventas
-- op. hard
select em.nombre, count(cli.codigocliente) from clientes as cli
inner join empleados as em on em.codigoempleado=cli.codigoempleadorepventas
group by em.codigoempleado;
-- op. easy
select count(codigocliente) as TotalClientes, codigoempleadorepventas
from clientes group by codigoempleadorepventas;
-- 2. Sacar cuántos pedidos tiene cada cliente en cada estado
-- op. easy
select codigocliente, count(codigopedido) as TotalPedidos
from pedidos
group by codigocliente;
-- op. hard
select cli.nombrecliente, count(p.codigopedido) as TotalPedidos from pedidos as p
inner join clientes as cli on cli.codigocliente=p.codigocliente
group by cli.codigocliente;
-- Bloque 6
-- 1. Sacar el importe medio de los pedidos de la BBDDjardineria
select avg(cuantia) from (select sum(preciounidad*cantidad) as cuantia from
detallepedidos
group by codigopedido) as AllPedidos;
-- 2. ¿Cuál es el pedido más caro del empleado que más clientes tiene?
select codigopedido, sum(preciounidad*cantidad) from detallepedidos
group by codigopedido
having sum(preciounidad*cantidad)=(select max(valorPedido)
from (select p.codigopedido , sum(dp.preciounidad*dp.cantidad) as valorPedido,
cli.codigoempleadorepventas, count(cli.codigocliente) from pedidos as p
inner join detallepedidos as dp on p.codigopedido=dp.codigopedido
inner join clientes as cli on p.codigocliente=cli.codigocliente
group by p.codigopedido
having count(cli.codigocliente)=(select max(total) from (select
count(codigocliente) as total from clientes
group by codigoempleadorepventas) as numclient)) as totalPedidos);