· 6 years ago · Jun 18, 2019, 02:14 PM
1# 1. Wypisz listę tych pracowników, którzy dostają premię oraz tych którzy mają pensję powyżej średniej.
2
3SELECT nazwp, 'dostaja premię' AS stat
4
5FROM prac, premia
6
7WHERE (prac.nump=premia.nump)
8
9AND ((premia.pr_10 > 0) OR (premia.pr_20 >0))
10
11UNION
12
13SELECT nazwp, 'zarobki powyżej średniej' AS stat
14
15FROM prac
16
17WHERE (zarob > (SELECT AVG(zarob) FROM prac) )
18
19GROUP BY nazwp, stat;
20
21# 2. Wskaż pracowników na stanowisku "kierownik", którzy nie mają podwładnych na stanowisku "sprzedawca" i których zarobki sa większe od średnich zarobków analityków (zapytanie napisać mądrze).
22
23DROP TABLE IF EXISTS srednie;
24
25CREATE TABLE srednie AS
26
27SELECT AVG(zarob) AS wartosc FROM prac
28
29WHERE stanowisko = 'analityk';
30
31SELECT nazwp, stanowisko
32
33FROM prac, srednie
34
35WHERE stanowisko = 'kierownik' AND nump NOT IN
36
37(SELECT kier
38
39FROM prac
40
41WHERE stanowisko = 'sprzedawca')
42
43AND zarob > srednie.wartosc;
44
45# 3. Ustaw pracowników zarabiających ponad 3000 dolarów we wszystkie możliwe pary w ten sposób aby po lewej stronie pary znajdował się pracownik z pensją większą niż pensja pracownika po prawej.
46
47SELECT P1.nazwp AS prac_1, P2.nazwp AS prac_2
48
49FROM prac P1, prac P2
50
51WHERE P1.zarob > 3000 AND P2.zarob > 3000 AND P1.zarob > P2.zarob;
52
53# 4. Wypisz wartość, nazwp i zarob dla obu pracowników w parze.
54
55Kolumny nazwij następująco: nazwp_górne, górne, nazwp dolne, dolne Posortuj tak, aby wartości w kolumnie górne były ustawione od najwyższej do najniższej.
56
57SELECT P1.nazwp AS nazwp_górne, P1.zarob AS górne,
58
59P2.nazwp AS nazwp_dolne, P2.zarob AS dolne
60
61FROM prac P1, prac P2
62
63WHERE P1.zarob > 3000 AND P2.zarob > 3000 AND P1.zarob > P2.zarob
64
65ORDER BY 2 DESC;
66
67# 5. Wskaż wszystkich analityków, którzy pracują w dziale 10 i których nazwisko nie rozpoczyna się na literę 'Z' oraz których pensja jest większa od pensji urzędników, podaj id_prac, nazwisko, stanowisko i zarobki.
68
69SELECT nump AS ID_pracownika, nazwp AS Nazwisko, stanowisko, zarob AS Zarobki
70
71FROM prac
72
73WHERE stanowisko = 'analityk' AND numdz=10 AND Nazwp NOT LIKE 'Z%' AND zarob > ALL (SELECT zarob FROM prac WHERE stanowisko = 'urzędnik');
74
75# 6. Wypisz nazwy wszystkich działów wraz z nazwiskami ich kierowników.
76
77SELECT d.nazwadz, p.nazwp
78
79FROM prac p, dzial d
80
81WHERE p.stanowisko = 'kierownik' AND p.numdz = d.numdz;
82
83# 7. Wypisz stanowiska, które w poszczególnych działach obsadzone są przez pracowników, którzy zarabiają więcej niż wynosi średnia pensja wszystkich pracowników i którzy zatrudnieni zostali po 12 stycznia 2007.
84
85DROP TABLE IF EXISTS srednie;
86
87CREATE TABLE srednie AS
88
89SELECT AVG(zarob) AS wartosc FROM prac;
90
91SELECT DISTINCT stanowisko, numdz
92
93FROM prac, srednie
94
95WHERE zarob > srednie.wartosc AND zatrud > '2007-01-12' ORDER BY numdz;
96
97# 8. Wypisz działy (numdz, nazwdz, lokalizacja), które mają kierownika zatrudnionego w frmie przed swoim podwładnym.
98
99SELECT dzial.numdz, dzial.nazwadz, dzial.lok
100
101FROM dzial, prac, srednie
102
103WHERE prac.numdz=dzial.numdz AND prac.stanowisko='kierownik'
104
105AND (prac.zatrud > ANY (SELECT zatrud
106
107FROM prac
108
109WHERE stanowisko NOT LIKE 'kierownik'));
110
111# 9. Oblicz jaki procent wszystkich pensji (pensja ogółem) stanowią pensje pracowników na poszczególnych stanowiskach.
112
113SELECT stanowisko, Zarob, SUM(Zarob/(SELECT SUM(zarob) FROM prac)*100)
114
115AS proc_sum_pensji
116
117FROM prac
118
119GROUP BY 1;