BD 7 dzialajace
SELECT '' AS Zadanie7_1_a FROM dual;
SELECT NAZWISKO, PLACA_POD
FROM PRACOWNICY
ORDER BY PLACA_POD DESC
FETCH FIRST 3 ROWS ONLY;
SELECT '' AS Zadanie7_1_b FROM dual;
SELECT NAZWISKO, PLACA_POD
FROM (
SELECT NAZWISKO, PLACA_POD
FROM PRACOWNICY
ORDER BY PLACA_POD DESC
)
WHERE ROWNUM <= 3;
SELECT '' AS Zadanie7_2_a FROM dual;
select nazwisko, placa_pod
from PRACOWNICY
order by placa_pod desc
offset 5 rows
fetch next 5 rows with ties;
SELECT '' AS Zadanie7_2_b FROM dual;
SELECT NAZWISKO, PLACA_POD
FROM (
SELECT NAZWISKO, PLACA_POD, ROWNUM as RN
FROM (
SELECT NAZWISKO, PLACA_POD
FROM PRACOWNICY
ORDER BY PLACA_POD DESC
)
ORDER BY PLACA_POD DESC
)
WHERE RN BETWEEN 6 AND 10;
SELECT '' AS Zadanie7_3 FROM dual;
WITH SREDNIE_PLAC AS (
SELECT id_zesp, AVG(PLACA_POD) AS SREDNIA
FROM PRACOWNICY
GROUP BY id_zesp
)
SELECT
P.NAZWISKO,
P.PLACA_POD,
(P.PLACA_POD - S.SREDNIA) AS ROZNICA
FROM PRACOWNICY P
JOIN SREDNIE_PLAC S ON P.id_zesp = S.id_zesp
WHERE (P.PLACA_POD - S.SREDNIA) > 0
order by nazwisko;
SELECT '' AS Zadanie7_4 FROM dual;
WITH lata AS (
SELECT EXTRACT(YEAR FROM ZATRUDNIONY) AS rok,
COUNT(*) AS liczba
FROM pracownicy
GROUP BY EXTRACT(YEAR FROM ZATRUDNIONY)
)
SELECT * FROM lata
ORDER BY liczba DESC;
SELECT '' AS Zadanie7_4 FROM dual;
SELECT EXTRACT(YEAR FROM ZATRUDNIONY) AS rok,
COUNT(*) AS liczba
FROM pracownicy
GROUP BY EXTRACT(YEAR FROM ZATRUDNIONY)
order by count(*) desc;
SELECT '' AS Zadanie7_5_1 FROM dual;
WITH lata AS (
SELECT EXTRACT(YEAR FROM ZATRUDNIONY) AS rok,
COUNT(*) AS liczba
FROM pracownicy
GROUP BY EXTRACT(YEAR FROM ZATRUDNIONY)
)
SELECT * FROM lata
order by liczba desc
fetch first 1 rows only;
-- WHERE liczba = (SELECT MAX(liczba) FROM lata);
SELECT '' AS Zadanie7_5_2 FROM dual;
WITH lata AS (
SELECT EXTRACT(YEAR FROM ZATRUDNIONY) AS rok,
COUNT(*) AS liczba
FROM pracownicy
GROUP BY EXTRACT(YEAR FROM ZATRUDNIONY)
)
SELECT * FROM lata
WHERE liczba = (SELECT MAX(liczba) FROM lata);
SELECT '' AS Zadanie7_6 FROM dual;
WITH Asystenci AS (
SELECT NAZWISKO, ETAT, ID_ZESP
FROM pracownicy
WHERE ETAT = 'ASYSTENT'
),
Piotrowo AS (
SELECT ID_ZESP, NAZWA, ADRES
FROM zespoly
WHERE ADRES = 'PIOTROWO 3A'
)
SELECT a.NAZWISKO, a.ETAT, p.NAZWA, p.ADRES
FROM Asystenci a
JOIN Piotrowo p ON a.ID_ZESP = p.ID_ZESP;
SELECT '' AS Zadanie7_7 FROM dual;
WITH ZespolySuma AS (
SELECT z.NAZWA, SUM(p.PLACA_POD) AS maks_suma_plac
FROM zespoly z
JOIN pracownicy p ON z.ID_ZESP = p.ID_ZESP
GROUP BY z.NAZWA
)
SELECT NAZWA, maks_suma_plac
FROM ZespolySuma
WHERE maks_suma_plac = (
SELECT MAX(maks_suma_plac)
FROM ZespolySuma
);
SELECT '' AS Zadanie7_8_1 FROM dual;
WITH Hierarchia (ID_PRAC, NAZWISKO, ID_SZEFA, POZYCJA_W_HIERARCHII) AS (
SELECT ID_PRAC, NAZWISKO, ID_SZEFA, 1 AS POZYCJA_W_HIERARCHII
FROM pracownicy
WHERE NAZWISKO = 'BRZEZINSKI'
UNION ALL
SELECT p.ID_PRAC, p.NAZWISKO, p.ID_SZEFA, h.POZYCJA_W_HIERARCHII + 1
FROM pracownicy p
JOIN Hierarchia h ON p.ID_SZEFA = h.ID_PRAC
)
SELECT NAZWISKO, POZYCJA_W_HIERARCHII
FROM Hierarchia
ORDER BY POZYCJA_W_HIERARCHII, NAZWISKO;
SELECT '' AS Zadanie7_8_2 FROM dual;
SELECT NAZWISKO, LEVEL AS POZYCJA_W_HIERARCHII
FROM pracownicy
START WITH NAZWISKO = 'BRZEZINSKI'
CONNECT BY PRIOR ID_PRAC = ID_SZEFA
ORDER BY POZYCJA_W_HIERARCHII, NAZWISKO;
SELECT '' AS Zadanie7_9_1 FROM dual;
WITH Hierarchia(ID_PRAC, NAZWISKO, ID_SZEFA, POZYCJA_W_HIERARCHII) AS (
SELECT
ID_PRAC,
NAZWISKO,
ID_SZEFA,
1 AS POZYCJA_W_HIERARCHII
FROM pracownicy
WHERE NAZWISKO = 'BRZEZINSKI'
UNION ALL
SELECT
p.ID_PRAC,
p.NAZWISKO,
p.ID_SZEFA,
h.POZYCJA_W_HIERARCHII + 1
FROM pracownicy p
JOIN Hierarchia h ON p.ID_SZEFA = h.ID_PRAC
)
SELECT RPAD(' ', POZYCJA_W_HIERARCHII) || NAZWISKO AS NAZWISKO,
POZYCJA_W_HIERARCHII
FROM Hierarchia
ORDER BY POZYCJA_W_HIERARCHII, NAZWISKO;
SELECT '' AS Zadanie7_9_2 FROM dual;
SELECT LPAD(' ', (LEVEL - 1)) || NAZWISKO AS NAZWISKO,
LEVEL AS POZYCJA_W_HIERARCHII
FROM PRACOWNICY
START WITH NAZWISKO = 'BRZEZINSKI'
CONNECT BY PRIOR ID_PRAC = ID_SZEFA ORDER BY POZYCJA_W_HIERARCHII;