Cześć,
Mam do zrobienia zadanie z taką treścią:
Utwórz dwa nowe zespoły o nazwach PIERWSZY i DRUGI, gdzie adres pierwszego zespołu będzie taki sam jak adres zespołu o najmniejszej średniej płacy pracowników, a adres drugiego zespołu będzie taki jak adres zespołu o największej liczbie pracowników. Tworzenie każdego z zespołów należy wykonać jednym poleceniem. W nowych zespołach wstaw po dwóch pracowników z płacami podstawowymi 3000 i 4000. Za pomocą jednego polecenia uśrednij płace pracowników pod każdym adresem. Zweryfikuj poprawność danych po modyfikacji.
Aktualnie, co udało mi się wykonać (mam nadzieję, że poprawnie):
--utworzenie zespolu PIERWSZY
INSERT INTO zespoly(id_zesp, nazwa, adres)
VALUES (
(SELECT MAX(id_zesp)+1 FROM zespoly),
'PIERWSZY',
(SELECT adres FROM zespoly NATURAL JOIN pracownicy GROUP BY id_zesp,adres
HAVING AVG(placa_pod) = (SELECT MIN(AVG(placa_pod)) FROM pracownicy GROUP BY id_zesp))
);
--utworzenie zespolu DRUGI
INSERT INTO zespoly(id_zesp, nazwa, adres)
VALUES (
(SELECT MAX(id_zesp)+1 FROM zespoly),
'DRUGI',
(SELECT adres FROM zespoly NATURAL JOIN pracownicy
GROUP BY id_zesp, adres HAVING COUNT (*) =
(SELECT MAX(COUNT(*)) FROM pracownicy GROUP BY id_zesp))
);
--dodanie pracowników
INSERT INTO pracownicy(id_prac, imie, nazwisko,
placa_pod, id_zesp)
VALUES (
(SELECT MAX(id_prac)+1 FROM pracownicy),
'Stefan',
'Batory',
'3000',
(SELECT id_zesp FROM zespoly WHERE nazwa='PIERWSZY')
);
INSERT INTO pracownicy(id_prac, imie, nazwisko,
placa_pod,id_zesp)
VALUES (
(SELECT MAX(id_prac)+1 FROM pracownicy),
'Kazimierz',
'Wielki',
'4000',
(SELECT id_zesp FROM zespoly WHERE nazwa='PIERWSZY')
);
INSERT INTO pracownicy(id_prac, imie, nazwisko,
placa_pod,id_zesp)
VALUES (
(SELECT MAX(id_prac)+1 FROM pracownicy),
'Mieszko',
'Pierwszy',
'3000',
(SELECT id_zesp FROM zespoly WHERE nazwa='DRUGI')
);
INSERT INTO pracownicy(id_prac, imie, nazwisko,
placa_pod, id_zesp)
VALUES (
(SELECT MAX(id_prac)+1 FROM pracownicy),
'Bolesław',
'Chrobry',
'4000',
(SELECT id_zesp FROM zespoly WHERE nazwa='DRUGI')
);
Nie potrafię natomiast zrobić dalszej części zadania, czyli: > Za pomocą jednego polecenia uśrednij płace pracowników pod każdym adresem
UPDATE pracownicy
SET placa_pod = (
SELECT AVG(placa_pod) FROM pracownicy p NATURAL JOIN zespoly z WHERE z.adres=adres
);
--WHERE????tu powinien być jakiś warunek?
Tyle napisałem, nie wiem czy dobrze podchodzę do problemu.
Skrypt do tworzenia bazy danych, na którym pracuję: http://wazniak.mimuw.edu.pl/images/4/48/Pracownicy.sql
tabela pracownicy:
tabela zespoly:
pzdr
- screenshot-20210607140239.png (16 KB) - ściągnięć: 6
- screenshot-20210607140209.png (69 KB) - ściągnięć: 16