lunes, 23 de mayo de 2011

Soluciones T12 (por dificultad)

Dificultad A

T12.002- Calcula y muestra la cantidad de televisores, cámaras y objetivos almacenados en la base de datos.
select
(select count(*) from tv) Televisiones,
(select count(*) from camara) Cámaras,
(select count(*) from objetivo) Objetivos;

T12.003- Calcula y muestra el porcentaje de televisores, cámaras y objetivos sobre el total de artículos almacenados en la base de datos.
select
(select count(*) from tv)/(select count(*) from articulo)*100 Televisiones,
(select count(*) from camara)/(select count(*) from articulo)*100 Cámaras,
(select count(*) from objetivo)/(select count(*) from articulo)*100 Objetivos;

Dificultad B

T12.001- Días que han pasado entre el primer y último pedido.
select datediff (
(select fecha from pedido
where fecha = (select max(fecha) from pedido)),
(select fecha from pedido
where fecha = (select min(fecha) from pedido))
) Días;

T12.004- Email, nombre y apellidos de los usuarios de la provincia 03, y si tienen un pedido cuyo importe total sea mayor que 10000€, mostrar también el número de pedido y ese importe; ordena la salida descendentemente por el valor del pedido.
select email, nombre, apellidos, numPedido, valor
from usuario u
left join (select p.numPedido, usuario, sum(cantidad*precio) valor
from pedido p, linped lp
where p.numpedido = lp.numpedido
group by numPedido, usuario
having sum(cantidad*precio) > 10000) calculo
on (email = usuario)
where provincia='03'
order by valor desc;

T12.005- De los usuarios que tengan algún pedido sin líneas de pedido y artículos pendientes de solicitud en alguna cesta, mostrar su email, nombre, apellidos, número del pedido sin líneas, y valor total de su cesta.

Comienza resolviendo pedidos sin líneas y valor de la cesta por usuario y utiliza los resultados como tablas temporales.
select email,nombre, apellidos,numPedido, pendiente
from usuario u,
(select numPedido,usuario
from pedido
where numPedido not in (select numPedido from linped)) Pedidos,
(select usuario, sum(pvp) Pendiente
from cesta ce, articulo art
where ce.articulo=art.cod
group by usuario) Cestas
where email=pedido.usuario and email=cestas.usuario;

T12.006- Para aquellos usuarios que tengan más de un pedido en 2010, obtener una tabla donde cada columna se corresponda con un mes del año y muestre la cantidad de pedidos realizada por ese usuario en ese mes. Cada fila empieza por el email, nombre y apellidos del usuario.
select email,nombre,apellidos,
(select count(*) from pedido where month(fecha)=1 and year(fecha)=2010 and usuario=email) Enero,
(select count(*) from pedido where month(fecha)=2 and year(fecha)=2010 and usuario=email) Febrero,
(select count(*) from pedido where month(fecha)=3 and year(fecha)=2010 and usuario=email) Marzo,
(select count(*) from pedido where month(fecha)=4 and year(fecha)=2010 and usuario=email) Abril,
(select count(*) from pedido where month(fecha)=5 and year(fecha)=2010 and usuario=email) Mayo,
(select count(*) from pedido where month(fecha)=6 and year(fecha)=2010 and usuario=email) Junio,
(select count(*) from pedido where month(fecha)=7 and year(fecha)=2010 and usuario=email) Julio,
(select count(*) from pedido where month(fecha)=8 and year(fecha)=2010 and usuario=email) Agosto,
(select count(*) from pedido where month(fecha)=9 and year(fecha)=2010 and usuario=email) Septiembre,
(select count(*) from pedido where month(fecha)=10 and year(fecha)=2010 and usuario=email) Octubre,
(select count(*) from pedido where month(fecha)=11 and year(fecha)=2010 and usuario=email) Noviembre,
(select count(*) from pedido where month(fecha)=12 and year(fecha)=2010 and usuario=email) Diciembre
from usuario
where email in (select usuario from pedido group by usuario having count(*) > 1);

No hay comentarios:

Publicar un comentario