-- WIDOK_1 SELECT m.nazwa_magazynu, SUM(ma.ilosc) AS suma_ilosci, SUM(ma.kwota) suma_kwot FROM magazyn m JOIN magazyn_artykul ma ON m.id = ma.magazyn_id GROUP BY m.id; -- WIDOK 2 SELECT m.nazwa_magazynu, ROUND(AVG(ma.ilosc),2) AS srednia_ilosc, ROUND(AVG(ma.kwota),2) srednia_kwota FROM magazyn m JOIN magazyn_artykul ma ON m.id = ma.magazyn_id GROUP BY m.id; -- WIDOK 3 SELECT a.nazwa_artykulu, SUM(ma.ilosc) AS suma_ilosci, SUM(ma.kwota) suma_kwot, ROUND(AVG(ma.ilosc),2) AS srednia_ilosc, ROUND(AVG(ma.kwota),2) srednia_kwota FROM artykul a JOIN magazyn_artykul ma ON a.id = ma.artykul_id GROUP BY a.id ORDER BY a.nazwa_artykulu asc; -- WIDOK 4 SELECT a.nazwa_artykulu, ma.rodzaj_operacji, ROUND(AVG(ma.ilosc),2) AS srednia_ilosc, ROUND(AVG(ma.kwota),2) srednia_kwota , SUM(ma.ilosc) AS suma_ilosci, SUM(ma.kwota) suma_kwot FROM artykul a JOIN magazyn_artykul ma ON a.id = ma.artykul_id GROUP BY a.id, ma.rodzaj_operacji ORDER BY a.nazwa_artykulu ASC; -- WIDOK 5 SELECT m.nazwa_magazynu, a.nazwa_artykulu, ma.rodzaj_operacji, ROUND(AVG(ma.ilosc),2) AS srednia_ilosc, ROUND(AVG(ma.kwota),2) srednia_kwota , SUM(ma.ilosc) AS suma_ilosci, SUM(ma.kwota) suma_kwot FROM artykul a JOIN magazyn_artykul ma ON a.id = ma.artykul_id JOIN magazyn m ON m.id = ma.magazyn_id GROUP BY m.id, a.id, ma.rodzaj_operacji ORDER BY m.nazwa_magazynu asc, a.nazwa_artykulu ASC; -- PROCEDURA_1 SELECT a.nazwa_artykulu, ma.rodzaj_operacji, ROUND(AVG(ma.ilosc),2) AS srednia_ilosc FROM artykul a JOIN magazyn_artykul ma ON a.id = ma.artykul_id WHERE DATE(ma.data_dodania) = '2019-10-10' GROUP BY a.id, ma.rodzaj_operacji ORDER BY a.nazwa_artykulu; CALL PROCEDURA_1('2019-10-10'); -- FUNCKJA_1 SELECT AVG(ma.ilosc) FROM artykul a JOIN magazyn_artykul ma ON a.id = ma.artykul_id WHERE a.id = 1 AND ma.rodzaj_operacji = 'P'; SELECT nazwa_artykulu, FUNKCJA_1(id, 'P') AS srednia_przyjec, FUNKCJA_1(id, 'S') srednia_sprzedazy FROM artykul WHERE id = 1; -- Zadanie na 6 -- Napisac procedure która odlozy w osobnej tabeli nazwe magazynu, nazwe artykulu oraz srednia kwote na podana date jako parametr -- Tabele mozna stworzyc z palca -- tabela CREATE TABLE `magazyn_artykul_proc` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `magazyn` VARCHAR(50) NOT NULL DEFAULT '', `art` VARCHAR(50) NOT NULL DEFAULT '', `kwota` DECIMAL(10,2) NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`) ); -- procedura parametr _data DATE; BEGIN DECLARE finished INTEGER DEFAULT 0; DECLARE nazwa_mag varchar(100) DEFAULT ""; DECLARE nazwa_art varchar(100) DEFAULT ""; DECLARE kwota DECIMAL(10,2) DEFAULT "0.00"; -- declare cursor for employee email DECLARE mag_art CURSOR FOR SELECT m.nazwa_magazynu, a.nazwa_artykulu, ROUND(AVG(ma.kwota),2) srednia_kwota FROM artykul a JOIN magazyn_artykul ma ON a.id = ma.artykul_id JOIN magazyn m ON m.id = ma.magazyn_id WHERE DATE(ma.data_dodania) = _data GROUP BY m.id, a.id; -- declare NOT FOUND handler DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; OPEN mag_art; TRUNCATE magazyn_artykul_proc; get_mag_art: LOOP FETCH mag_art INTO nazwa_mag, nazwa_art, kwota; IF finished = 1 THEN LEAVE get_mag_art; END IF; INSERT INTO magazyn_artykul_proc(magazyn, art, kwota) VALUES (nazwa_mag, nazwa_art, kwota); END LOOP get_mag_art; CLOSE mag_art; END