-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathZ3 SQL.sql
113 lines (86 loc) · 2.22 KB
/
Z3 SQL.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*Z3 Karol Sekściński GR4 319093 */
/*
Z3.1 - policzyć liczbę firm w każdym mieście (zapytanie z grupowaniem)
Najlepiej wynik zapamiętać w tabeli tymczasowej
*/
SELECT COUNT(DISTINCT f.nazwa_skr) AS [Liczba firm]
, LEFT(m.nazwa, 20) AS [Miasto]
INTO #RR
FROM FIRMY f, Miasta m
WHERE f.id_miasta = m.id_miasta
GROUP BY m.nazwa
/*
Liczba firm Miasto
----------- --------------------
1 BIALYSTOK
1 KRYNKI
1 OSTROLEKA
1 RADOM
2 SIERPC
1 SOKOLKA
1 SUWALKI
1 WARSZAWA
1 WYSZKOW
(9 row(s) affected)
*/
/*
Z3.2 - korzystając z wyniku Z3,1 - pokazać, które miasto ma największą liczbę firm
(zapytanie z fa - analogiczne do zadań z Z2)
*/
DECLARE @max int
SELECT @max = MAX(r.[Liczba firm])
FROM #RR r
SELECT r.Miasto
, r.[Liczba firm]
FROM #RR r
WHERE (r.[Liczba firm] = @max)
/*
Miasto Liczba firm
-------------------- -----------
SIERPC 2
(1 row(s) affected)
*/
/*
Z3.3 Pokazać liczbę osób w każdym z województw (czyli grupowanie po kod_woj)
*/
SELECT COUNT(DISTINCT o.id_osoby) AS [Liczba osob]
, LEFT(w.nazwa,20) AS [WOJ]
FROM WOJ w
join MIASTA m on (w.kod_woj = m.kod_woj)
join OSOBY o on (m.id_miasta = o.id_miasta)
GROUP BY w.kod_woj, w.nazwa
/*
Liczba osob WOJ
----------- --------------------
8 MAZOWIECKIE
7 PODLASKIE
(2 row(s) affected)
*/
/*
Z3.4 Pokazać województwa w których nie ma żadnej osoby
(jak nie ma WOJ w którym nie ma MIAST w których nie ma osób
to prosze dodać ze 2 takie WOJ i ze miasta w tych WOJ)
*/
SELECT w.nazwa AS [WOJ bez osob]
FROM WOJ w
WHERE NOT EXISTS
(SELECT 1 FROM MIASTA m, OSOBY o WHERE (m.id_miasta = o.id_miasta) AND (m.kod_woj = w.kod_woj))
/*
WOJ bez osob
--------------------------------------------------
POMORSKIE
(1 row(s) affected)
*/
/*
(suma z3.3 i z3.4 powinna dać nam pełną listę województw -
woj gdzie sa osoby i gdzie ich nie ma to razem powinny byc wszystkie
*/
SELECT * FROM WOJ
/*
kod_woj nazwa
------- --------------------------------------------------
MAZ MAZOWIECKIE
POD PODLASKIE
POM POMORSKIE
(3 row(s) affected)
*/