Resolución de ejercicios


/*
EJERCICIOS
PROPUESTOS

***********************************************************************
EJERCICIOS
************************************************************************

1. Actualizar el precio unitario de los productos de la categoría CARNICOS, subiéndolos en un 10%         (1)
*/

select * from productos;
update productos
set preciounit= (preciounit*0.1) + preciounit;

/*
2. Actualizar el teléfono celular del proveedor cuyo contacto es MANUEL ANDRADE, con el valor 099010291         (2)
*/

select * from proveedores;
update proveedores
set celuprov= '0990101291'
where contacto= 'MANUEL ANDRADE';

/*
3. Borrar el producto YOGURT DE SABORES                                                       (3)
*/

select * from productos;
delete from productos
where descripcion ='YOGURT DE SABORES';

/*
4. Realizar las siguientes consultas:

4.1 Mostrar todas las órdenes: el id de la orden, el apellido y nombre del empleado que la atendió           (4)
el nombre de la compañía cliente y la fecha de orden
*/

SELECT * FROM ORDENES;
select * from empleados;
select * from clientes;
select ord.ordenid, emp.empleadoid, emp.nombre, emp.apellido,ord.fechaorden, cli.clienteid, cli.nombrecia
from ordenes ord, empleados emp, clientes cli
where ord.empleadoid=emp.empleadoid andord.clienteid=cli.clienteid ;

/*
4.2 Mostrar la suma total de cada tipo de producto pedidos en todas las órdenes.                    (5)
*/

select * from detalle_ordenes;
select productoid, sum(cantidad) as "Suma total"
from detalle_ordenes
group by productoid;

/*
4.3 Mostrar el número de órdenes atendidas por cada empleado, incluidos los que tienen 0 órdenes.          (6)
*/

select * from empleados;
select * from ordenes;
select nombre as "Nombre" , apellido as "Apellido", count(ord.empleadoid) as "# de ordenes"
from empleados emp
left join ordenes ord
on emp.empleadoid= ord.empleadoid
group by nombre, apellido;

/*
4.4 Muestre los proveedores y la suma de dinero vendido en los productos de ese proveedor.                  (7)
*/

select * from proveedores;
select * from productos;
select * from detalle_ordenes;

select prov.nombreprov as "Nombre",sum(d.cantidad *prod.preciounit ) as "Suma dinero"
from proveedores prov, productos prod, detalle_ordenes d
where d.productoid= prod.productoid and prov.proveedorid=prod.proveedorid
group by nombreprov;

/*
5. Realizar el siguiente procedimiento almacenado.

5.1 Escriba un procedimiento almacenado que reciba como parámetro un código de proveedor y                  (8)
devuelve el número de órdenes en las que están incluidos productos de ese proveedor.
*/

DROP LANGUAGE IF EXISTS plpgsql;
CREATE LANGUAGE plpgsql;

select * from productos;
select * from ordenes;
select * from detalle_ordenes;

create or replace function num_ordene_proveedor(idproo int)returns integer
as $$
      declare
      num int;
      begin
            select count(p.productoid) into num from productos pjoin detalle_ordenes dor
            on (p.productoid=dor.productoid)join ordenes ordon(ord.ordenid=dor.ordenid)
            where proveedorid=idproo
            group by proveedorid;
            return num;
      end;
$$ LANGUAGE plpgsql;

select num_ordene_proveedor(10)

/*
5.2 Escriba un procedimiento almacenado que reciba como parámetro un nombre de una categoría y                 (9)
devuelve el código del producto de esa categoría que tiene más unidades vendidas.
*/

select * from categorias;
select * from productos;
select * from detalle_ordenes;

create or replace function mas_vendido (nomCat character(50))returns integer
as $$
      declare
      num int;
      begin
            select p.productoid,sum(cantidad)INTO NUM fromproductos p join categorias c on (c.categoriaid=p.categoriaid)
            join detalle_ordenes dor on(p.productoid=dor.productoid)
            where c.nombrecat=nomCat
            group by descripcion, p.productoid
            order by sum DESC
            limit 1;
            return num;
      end;
$$LANGUAGE 'plpgsql';

select mas_vendido('CARNICOS')

No hay comentarios:

Publicar un comentario