Professional Documents
Culture Documents
#bai 2
#bai 3
DROP PROCEDURE IF EXISTS filmDiscount;
DELIMITER //
CREATE PROCEDURE filmDiscount(_p INT , _n INT, _date date)
BEGIN
DECLARE f_id INT;
DECLARE cond INT DEFAULT 1;
DECLARE f_cur CURSOR FOR
SELECT inventory.film_id FROM inventory
JOIN rental ON rental.inventory_id = inventory.inventory_id
WHERE MONTH(rental.rental_date) = MONTH(_date) and YEAR(rental.rental_date)
= YEAR(_date)
GROUP BY inventory.film_id
ORDER BY COUNT(rental.rental_id) ASC, inventory.film_id ASC LIMIT _n;
DECLARE EXIT HANDLER FOR NOT FOUND SET cond = 0;
OPEN f_cur ;
WHILE cond DO
FETCH f_cur INTO f_id;
UPDATE film
SET rental_rate = (1-_p/100)* rental_rate
WHERE film_id = f_id;
END WHILE;
CLOSE f_cur;
END //
DELIMITER ;
UPDATE film
SET rental_rate = (1-_p/100)* rental_rate
WHERE film_id in
(SELECT inventory.film_id FROM inventory
JOIN rental ON rental.inventory_id = inventory.inventory_id
WHERE MONTH(rental.rental_date) = MONTH(_date) and YEAR(rental.rental_date) =
YEAR(_date)
GROUP BY inventory.film_id
ORDER BY COUNT(rental.rental_id) ASC, inventory.film_id ASC LIMIT _n);
UPDATE film
RIGHT JOIN
(SELECT inventory.film_id as fid FROM inventory
JOIN rental ON rental.inventory_id = inventory.inventory_id
WHERE MONTH(rental.rental_date) = MONTH("2005-05-24") and YEAR(rental.rental_date)
= YEAR("2005-05-24")
GROUP BY inventory.film_id
ORDER BY COUNT(rental.rental_id) ASC, inventory.film_id ASC LIMIT 5) as lowest_film
on f.film_id = lowest_film.fid
SET rental_rate = (1-_p/100)* rental_rate;