Soluciones

English version (when available)

T08.001- Obtener el importe total por línea para el pedido 1, en la salida aparecerá las columnas linea, articulo y el campo calculado total.

select linea, articulo, (importe*cantidad) total 
from linped 
where numPedido=1;


T08.002- Obtener la cantidad de provincias distintas de las que tenemos conocimiento de algún usuario.

select count(distinct provincia) provincias from usuario;


T08.003- Cantidad de usuarios de nuestra BD.

select count(*) usuarios from usuario;


T08.004- Número de articulos con precio de venta al público mayor de 200 euros.

select count(*) from articulo where pvp>200;


T08.005- Total en euros de la cesta del usuario "bmm@agwab.com".

select sum(pvp) total 
from cesta, articulo 
where usuario='bmm@agwab.com' and articulo=cod;


T08.006- Tamaño máximo de pantalla para las televisiones.

select MAX(pantalla) maxPantalla from tv;


T08.007- Media de precios de venta al público distintos de los articulos, redondeada a dos decimales.

select round(avg(distinct pvp),2) mediaventa from articulo;


T08.008- Nombre y precio de los articulos con el mínimo stock disponible.

select nombre,pvp 
from articulo,stock 
where cod=articulo 
  and disponible = (select min(disponible) from stock);


T08.009- Número de pedido, fecha y nombre y apellidos del usuario de las lineas de pedido cuyo total en euros es el más alto.

select p.numPedido,fecha,nombre,apellidos 
from pedido p,linped l,usuario u 
where p.usuario=email 
  and p.numPedido=l.numPedido 
  and (cantidad*importe)=(select max(cantidad*importe) from linped);


T08.010- Máximo, mínimo y media de importe de los artículos.

select MAX(pvp) maxPvp, MIN(pvp) minPvp, AVG(pvp) mediaPvp from articulo;


T08.011- Código, nombre, pvp y fecha de incorporación del artículo a la cesta más reciente.

select cod, nombre, pvp, fecha
from cesta, articulo 
where articulo=cod 
  and fecha=(select MAX(fecha) from cesta);


T08.012- Cantidad de artículos que están descatalogados.

select count(*) NumArtDescatalogados 
from stock 
where entrega='Descatalogado'


T08.013- Precio máximo del artículo en stock que será entregado próximamente.

select max(pvp) 
from articulo, stock 
where cod=articulo 
  and entrega='Próximamente';


T08.014- Nombre, código y disponible en stock para todos los artículos cuyo código acabe en 3, siendo ese disponible el mínimo de toda la tabla.

select nombre, cod, disponible MinDisponible 
from stock, articulo 
where articulo=cod 
  and cod like '%3' 
  and disponible=(select MIN(disponible) from stock);


T08.015- Importe máximo, mínimo y medio de las líneas de pedido que incluyen el artículo “Bravia KDL-32EX402”

select MAX(importe) MaxPrecio, MIN(importe) MinPrecio, AVG(importe) PrecioMedio 
from linped l, articulo a 
where a.cod=l.articulo and a.nombre='Bravia KDL-32EX402';


T08.016- Cantidad total que se ha pedido de los artículos cuyo nombre empieza por "UE22".

select SUM(cantidad) cantidadTotal 
from linped, articulo 
where articulo=cod and nombre like 'UE22%';


T08.017- Importe medio de los artículos incluidos en la línea de pedido número 4, redondeado a 3 decimales.

select round(avg(importe),3) PrecioMedio 
from linped 
where linea=4;


T08.018- Número de pedido, nombre, teléfono y email de usuario del pedido (o los pedidos) que contiene líneas de pedido cuyo importe unitario por artículo sea igual al importe más alto de entre todas las segundas líneas de todos los pedidos.

select l.numPedido, nombre, telefono, email 
from usuario u, pedido p, linped l 
where l.numPedido=p.numPedido 
  and p.usuario=u.email 
  and importe=(select MAX(importe) from linped where linea=2);
Primero se ha de calcular el precio máximo de entre todas las segundas líneas (la subconsulta) y, entonces, ya se pueden comparar TODAS las líneas de pedido: saldrá, seguro, el pedido de esa segunda línea que da el máximo, pero ese precio máximo se puede repetir en cualquier otra línea.

T08.019- Diferencia entre el importe máximo y el importe mínimo del pedido número 30.

select (MAX(importe)-MIN(importe)) DiferenciaPrecios 
from linped 
where numPedido=30;


T08.020- Código, nombre, y PVP del artículo que más hay en stock.

select cod,nombre,pvp 
from articulo,stock 
where cod=articulo 
  and disponible = (select MAX(disponible) from stock);


T08.021- Fecha de nacimiento del usuario más viejo.

select MIN(nacido) from usuario;


T08.022- Obtener en una única consulta, cuántas filas tiene la tabla artículo, cuántas de ellas tienen valor en la columna marca y cuántas marcas distintas hay almacenadas en la tabla.

select count(*) filas, count(marca) conmarca, count(distinct marca) marcas from articulo;


T08.023- Código, nombre y marca del artículo más caro.

select cod, nombre, marca 
from articulo 
where pvp = (select max(pvp) from articulo);
Solución alternativa:
select cod, nombre, marca 
from articulo 
where pvp >= all (select pvp from articulo);
La solución alternativa no funciona en versiones antiguas de MySQL por un "bug".

T08.024- Código, nombre y pvp de la cámara más cara de entre las de tipo réflex.

select a.cod, nombre, pvp
from articulo a, camara c
where a.cod=c.cod
and tipo like '%reflex%'
and pvp=(
    select max(pvp) 
    from articulo a, camara c 
    where a.cod=c.cod and tipo like '%reflex%');
Solución alternativa:
select a.cod, nombre, pvp
from articulo a, camara c
where a.cod=c.cod and tipo like'%réflex%'
and pvp >= all (select pvp from articulo a, camara c
                where a.cod=c.cod and tipo like'%réflex%');


T08.025- Código, nombre y disponibilidad de los artículos con menor disponibilidad de entre los que pueden estar disponibles en 24 horas.

select cod,nombre,disponible 
from stock, articulo 
where cod=articulo 
  and entrega='24 horas'
  and disponible=(select min(disponible) 
                   from stock 
                   where entrega='24 horas');
Solución alternativa:
select cod, nombre, disponible
from stock, articulo 
where cod=articulo 
and entrega ='24 horas'
and disponible <=all (select disponible
                      from stock
                      where entrega='24 horas');


T08.026- Número de pedido y artículo con la línea de pedido de menor importe.

select numpedido, articulo 
from linped 
where importe = (select min(importe) from linped);


T08.027- Líneas de pedido y número de pedido al que correspondan dichas líneas, y que incluyan más cantidad de artículos que las demás.

select linea, numpedido 
from linped 
where cantidad = (select max(cantidad) from linped);
Solución alternativa:
select linea, numpedido 
from linped 
where cantidad >= all (select cantidad from linped);


T08.028- Líneas de pedido y nombre de los artículos que aparecen en esas líneas, si el importe de esas líneas no es el menor de todas las líneas conocidas.

select distinct linea, nombre 
from articulo a, linped l 
where a.cod=l.articulo 
   and importe > (select min(importe) from linped);
Solución alternativa:
select distinct linea, nombre 
from articulo a, linped l 
where a.cod=l.articulo 
   and importe > any (select importe from linped);


T08.029- Nombre, precio y marca de los artículos con mayor disponibilidad de stock.

select nombre, pvp, marca 
from articulo a, stock s 
where a.cod=s.articulo 
   and s.disponible = (select max(disponible) from stock);
Solución alternativa:
select nombre, pvp, marca 
from articulo a, stock s 
where a.cod=s.articulo 
  and s.disponible >=all (select disponible from stock);


T08.030- Nombre, precio y marca de los artículos que no tengan la mayor disponibilidad de stock.

select nombre, pvp, marca 
from articulo a, stock s 
where a.cod=s.articulo 
   and s.disponible <> (select max(disponible) from stock);
Solución alternativa:
select nombre, pvp, marca 
from articulo a, stock s 
where a.cod=s.articulo 
   and s.disponible < any (select disponible from stock);