1+ USE library;
2+
3+
4+ -- 1. Wypisz wszystkich członków biblioteki z adresami i info czy jest dzieckiem czy nie i
5+ -- ilość wypożyczeń w poszczególnych latach i miesiącach.
6+
7+ SELECT firstname + ' ' + lastname as ' name' ,
8+ ISNULL((SELECT TOP 1 ' n' FROM juvenile j WHERE m .member_no = j .adult_member_no ), ' y' ) as ' is kid' ,
9+ MONTH(out_date) as ' month' ,
10+ YEAR(out_date) as ' year' ,
11+ COUNT (l .title_no ) as ' cnt' ,
12+ m .member_no
13+ FROM member m
14+ INNER JOIN loanhist l on m .member_no = l .member_no
15+ GROUP BY m .member_no , firstname + ' ' + lastname, MONTH(out_date), YEAR(out_date)
16+
17+
18+ USE Northwind
19+
20+ -- 2. Zamówienia z Freight większym niż AVG danego roku.
21+
22+ SELECT OrderID,
23+ Freight,
24+ (SELECT AVG (Freight)
25+ FROM Orders o2
26+ WHERE Year(o2 .OrderDate ) = YEAR(o .OrderDate )) as ' avg' ,
27+ YEAR(OrderDate) as ' year'
28+ FROM Orders o
29+ WHERE (SELECT AVG (Freight)
30+ FROM Orders o2
31+ WHERE Year(o2 .OrderDate ) = YEAR(o .OrderDate )) < o .Freight
32+
33+
34+ -- 3. Klienci, którzy nie zamówili nigdy nic z kategorii 'Seafood' w trzech wersjach.
35+ USE Northwind
36+ SELECT CustomerID
37+ FROM CUSTOMERS
38+ WHERE CustomerID NOT IN (SELECT C .CustomerID
39+ FROM Customers C
40+ LEFT JOIN Orders O on C .CustomerID = O .CustomerID
41+ LEFT JOIN [Order Details] OD on O .OrderID = OD .OrderID
42+ LEFT JOIN Products P on OD .ProductID = P .ProductID
43+ LEFT JOIN Categories C2 on P .CategoryID = C2 .CategoryID
44+ WHERE C2 .CategoryName = ' Seafood' )
45+
46+
47+ SELECT CustomerID
48+ FROM Customers Ci
49+ WHERE NOT EXISTS(SELECT C .CustomerID
50+ FROM Customers C
51+ LEFT JOIN Orders O on C .CustomerID = O .CustomerID
52+ LEFT JOIN [Order Details] OD on O .OrderID = OD .OrderID
53+ LEFT JOIN Products P on OD .ProductID = P .ProductID
54+ LEFT JOIN Categories C2 on P .CategoryID = C2 .CategoryID
55+ WHERE C2 .CategoryName = ' Seafood'
56+ AND Ci .CustomerID = C .CustomerID )
57+
58+
59+ -- 4. Dla każdego klienta najczęściej zamawianą kategorię w dwóch wersjach.
60+ USE Northwind
61+ SELECT CI .CustomerID ,
62+ (SELECT TOP 1 C2 .CategoryName
63+ FROM Customers C
64+ LEFT JOIN Orders O on C .CustomerID = O .CustomerID
65+ LEFT JOIN [Order Details] OD on O .OrderID = OD .OrderID
66+ LEFT JOIN Products P on OD .ProductID = P .ProductID
67+ LEFT JOIN Categories C2 on P .CategoryID = C2 .CategoryID
68+ WHERE C .CustomerID = CI .CustomerID
69+ GROUP BY C .CustomerID , C2 .CategoryName
70+ ORDER BY COUNT (P .CategoryID ) DESC ) as ' best_category'
71+ FROM Customers CI
72+
73+
74+ -- 1. Podział na company, year month i suma freight
75+
76+
77+ SELECT S .CompanyName ,
78+ MONTH(OrderDate),
79+ YEAR(OrderDate),
80+ SUM (Freight)
81+ FROM Shippers S
82+ LEFT JOIN Orders O on S .ShipperID = O .ShipVia
83+ GROUP BY S .CompanyName ,
84+ MONTH(OrderDate),
85+ YEAR(OrderDate)
86+
87+ -- 2. Wypisać wszystkich czytelników, którzy nigdy nie wypożyczyli książki dane
88+ -- adresowe i podział czy ta osoba jest dzieckiem (joiny, in, exists)
89+
90+ USE library
91+
92+ SELECT DISTINCT m .firstname ,
93+ m .lastname ,
94+ m .member_no ,
95+ ISNULL((SELECT 0 FROM adult a WHERE m .member_no = a .member_no ), 1 ) as ' kid' ,
96+ (SELECT street
97+ FROM juvenile j
98+ INNER JOIN member mi2 on j .member_no = mi2 .member_no
99+ INNER JOIN adult a on a .member_no = j .adult_member_no
100+ WHERE j .member_no = m .member_no
101+ UNION
102+ SELECT street
103+ FROM member mi
104+ INNER JOIN adult a on a .member_no = mi .member_no
105+ WHERE mi .member_no = m .member_no ) as ' address'
106+
107+ FROM member m
108+ WHERE m .member_no NOT IN (SELECT l .member_no FROM loanhist l)
109+
110+ SELECT *
111+ FROM loanhist
112+ WHERE member_no = 2
113+ -- adresy wszystkich memberow w LIBRARY
114+ SELECT street
115+ FROM juvenile j
116+ INNER JOIN member mi2 on j .member_no = mi2 .member_no
117+ INNER JOIN adult a on a .member_no = j .adult_member_no
118+ WHERE j .member_no = 13
119+ UNION
120+ SELECT street
121+ FROM member mi1
122+ INNER JOIN adult a on a .member_no = mi1 .member_no
123+ WHERE mi1 .member_no = 13
124+
125+
126+ -- 3. Najczęściej wybierana kategoria w 1997 dla każdego klienta
127+
128+ USE Northwind;
129+
130+
131+ SELECT CI .CustomerID ,
132+ (SELECT TOP 1 C2 .CategoryName
133+ FROM Customers C
134+ LEFT JOIN Orders O on C .CustomerID = O .CustomerID
135+ LEFT JOIN [Order Details] OD on O .OrderID = OD .OrderID
136+ LEFT JOIN Products P on OD .ProductID = P .ProductID
137+ LEFT JOIN Categories C2 on P .CategoryID = C2 .CategoryID
138+ WHERE C .CustomerID = CI .CustomerID
139+ AND YEAR(O .OrderDate ) = 1997
140+ GROUP BY C .CustomerID , C2 .CategoryName
141+ ORDER BY COUNT (P .CategoryID ) DESC )
142+ FROM Customers CI
143+
144+
145+ -- 4. Dla każdego czytelnika imię nazwisko, suma książek wypożyczony przez tą osobę i
146+ -- jej dzieci, który żyje w Arizona ma mieć więcej niż 2 dzieci lub kto żyje w Kalifornii
147+ -- ma mieć więcej niż 3 dzieci
148+
149+ USE library
150+
151+ SELECT a .member_no ,
152+ firstname,
153+ lastname,
154+ (SELECT COUNT (* ) FROM loanhist l WHERE l .member_no = a .member_no ) as ' books_parent' ,
155+ (SELECT COUNT (* )
156+ FROM juvenile j
157+ INNER JOIN loanhist l2 on j .member_no = l2 .member_no
158+ WHERE j .adult_member_no = a .member_no ) as ' books_kids'
159+ FROM adult a
160+ LEFT JOIN member m on a .member_no = m .member_no
161+ WHERE (a .state = ' AZ' AND (SELECT COUNT (* ) from juvenile j2 WHERE j2 .adult_member_no = a .member_no ) > 2 )
162+ OR (a .state = ' CA' AND (SELECT COUNT (* ) from juvenile j2 WHERE j2 .adult_member_no = a .member_no ) > 3 )
163+
164+
165+ -- 1. Jaki był najpopularniejszy autor wśród dzieci w Arizonie w 2001
166+
167+ SELECT TOP 1 author
168+ FROM juvenile j
169+ INNER JOIN loanhist l on j .member_no = l .member_no
170+ INNER JOIN title t on l .title_no = t .title_no
171+ WHERE YEAR(l .out_date ) = 2001
172+ GROUP BY author
173+ ORDER BY COUNT (author) DESC ;
174+
175+
176+ -- 2. Dla każdego dziecka wybierz jego imię nazwisko, adres, imię i nazwisko rodzica i
177+ -- ilość książek, które oboje przeczytali w 2001
178+
179+
180+ SELECT m .firstname ,
181+ m .lastname ,
182+ (SELECT street + ' ' + state
183+ FROM adult
184+ INNER JOIN juvenile j2 on adult .member_no = j2 .adult_member_no
185+ WHERE j2 .member_no = j .member_no ) address,
186+ (SELECT firstname FROM member WHERE j .adult_member_no = member .member_no ) parent,
187+ (SELECT lastname FROM member WHERE j .adult_member_no = member .member_no ) parent2,
188+ (SELECT COUNT (* ) FROM loanhist l WHERE l .member_no = j .member_no AND YEAR(in_date) = 2001 ) +
189+ (SELECT COUNT (* ) FROM loanhist l where l .member_no = j .adult_member_no AND YEAR(in_date) = 2001 ) books
190+ FROM juvenile j
191+ INNER JOIN member m on j .member_no = m .member_no
192+
193+
194+ -- 3. Kategorie które w roku 1997 grudzień były obsłużone wyłącznie przez ‘United
195+ -- Package’
196+
197+ USE Northwind
198+
199+ SELECT DISTINCT CategoryName
200+ FROM Categories
201+ INNER JOIN Products P on Categories .CategoryID = P .CategoryID
202+ INNER JOIN [Order Details] [O D] on P .ProductID = [O D].ProductID
203+ INNER JOIN Orders O on [O D].OrderID = O .OrderID
204+ INNER JOIN Shippers S2 on O .ShipVia = S2 .ShipperID
205+ WHERE S2 .CompanyName = ' United Package'
206+ AND YEAR(ShippedDate) = 1997
207+
208+
209+ -- 4. Wybierz klientów, którzy kupili przedmioty wyłącznie z jednej kategorii w marcu
210+ -- 1997 i wypisz nazwę tej kategorii
211+
212+
213+ SELECT C .CustomerID ,
214+ (SELECT COUNT (DISTINCT C2 .CategoryID )
215+ FROM Categories C2
216+ INNER JOIN Products P on C2 .CategoryID = P .CategoryID
217+ INNER JOIN [Order Details] [O D] on P .ProductID = [O D].ProductID
218+ INNER JOIN Orders O on [O D].OrderID = O .OrderID
219+ WHERE C .CustomerID = O .CustomerID
220+ AND (YEAR(OrderDate) = 1997 AND MONTH(OrderDate) = 3 )),
221+ (SELECT TOP 1 C2 .CategoryName
222+ FROM Categories C2
223+ INNER JOIN Products P on C2 .CategoryID = P .CategoryID
224+ INNER JOIN [Order Details] [O D] on P .ProductID = [O D].ProductID
225+ INNER JOIN Orders O on [O D].OrderID = O .OrderID
226+ WHERE C .CustomerID = O .CustomerID
227+ AND (YEAR(OrderDate) = 1997 AND MONTH(OrderDate) = 3 ))
228+ FROM Customers C
229+ WHERE (SELECT COUNT (DISTINCT C2 .CategoryID )
230+ FROM Categories C2
231+ INNER JOIN Products P on C2 .CategoryID = P .CategoryID
232+ INNER JOIN [Order Details] [O D] on P .ProductID = [O D].ProductID
233+ INNER JOIN Orders O on [O D].OrderID = O .OrderID
234+ WHERE C .CustomerID = O .CustomerID
235+ AND (YEAR(OrderDate) = 1997 AND MONTH(OrderDate) = 3 )) = 1
236+
237+ -- 1. Wybierz dzieci wraz z adresem, które nie wypożyczyły książek w lipcu 2001
238+ -- autorstwa ‘Jane Austin
239+
240+ USE library
241+
242+
243+ SELECT DISTINCT j .member_no , street, firstname, lastname
244+ FROM juvenile j
245+ INNER JOIN adult a on j .adult_member_no = a .member_no
246+ INNER JOIN member m on m .member_no = j .member_no
247+ INNER JOIN loanhist l on j .member_no = l .member_no
248+ WHERE j .member_no NOT IN (SELECT member_no
249+ FROM loanhist
250+ INNER JOIN title t on t .title_no = loanhist .title_no
251+ WHERE YEAR(out_date) = 2001
252+ AND MONTH(out_date) = 7
253+ AND author = ' Jane Austin' )
254+
255+
256+ -- 2. Wybierz kategorię, która w danym roku 1997 najwięcej zarobiła, podział na miesiące
257+
258+ USE Northwind
259+
260+
261+ SELECT CategoryName,
262+ MONTH(OrderDate) month,
263+ SUM (Quantity * [O D].UnitPrice * (1 - Discount))
264+ FROM Categories
265+ INNER JOIN Products P on Categories .CategoryID = P .CategoryID
266+ INNER JOIN [Order Details] [O D] on P .ProductID = [O D].ProductID
267+ INNER JOIN Orders O on [O D].OrderID = O .OrderID
268+ WHERE YEAR(OrderDate) = 1997
269+ GROUP BY CategoryName, MONTH(OrderDate)
270+ ORDER BY 1 DESC ;
271+
272+
273+
274+ -- 3. Dane pracownika i najczęstszy dostawca pracowników bez podwładnych
275+
276+ -- bez podwladnych
277+ SELECT EmployeeID
278+ FROM Employees E
279+ WHERE NOT EXISTS(SELECT E2 .EmployeeID FROM Employees E2 WHERE E2 .Reportsto = E .EmployeeID )
280+
281+ -- z podwladnymi
282+ SELECT EmployeeID
283+ FROM Employees E
284+ WHERE EXISTS(SELECT E2 .EmployeeID FROM Employees E2 WHERE E2 .Reportsto = E .EmployeeID )
285+
286+
287+ SELECT DISTINCT E .EmployeeID ,
288+ (SELECT TOP 1 Shippers .CompanyName
289+ FROM Orders
290+ INNER JOIN Employees E3 on Orders .EmployeeID = E3 .EmployeeID
291+ INNER JOIN Shippers ON Orders .ShipVia = Shippers .ShipperID
292+ WHERE E3 .EmployeeID = E .EmployeeID
293+ GROUP BY Shippers .CompanyName
294+ ORDER BY COUNT (ShipVia) DESC ) BestShipper
295+ FROM Employees E
296+ INNER JOIN Orders O on E .EmployeeID = O .EmployeeID
297+ WHERE NOT EXISTS(SELECT E2 .EmployeeID FROM Employees E2 WHERE E2 .Reportsto = E .EmployeeID )
298+ GROUP BY E .EmployeeID , ShipVia
299+
300+
301+ -- 4. Wybierz tytuły książek, gdzie ilość wypożyczeń książki jest większa od średniej ilości
302+ -- wypożyczeń książek tego samego autora.
303+
304+
305+ USE library
306+
307+
308+ SELECT title,
309+ (SELECT COUNT (* ) FROM loanhist l2 WHERE l2 .title_no = t .title_no ),
310+ (SELECT AVG (cnt)
311+ FROM (
312+ SELECT COUNT (title) cnt
313+ FROM loanhist
314+ INNER JOIN title ON loanhist .title_no = title .title_no
315+ WHERE author = t .author
316+ GROUP BY title
317+ ) as cnts)
318+ FROM title t
319+ INNER JOIN loanhist l on t .title_no = l .title_no
320+ WHERE (SELECT COUNT (* ) FROM loanhist l2 WHERE l2 .title_no = t .title_no ) >
321+ (SELECT AVG (cnt)
322+ FROM (
323+ SELECT COUNT (title) cnt
324+ FROM loanhist
325+ INNER JOIN title ON loanhist .title_no = title .title_no
326+ WHERE author = t .author
327+ GROUP BY title
328+ ) as cnts)
0 commit comments