Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 39.29 KB | None | 0 0
  1. -- kolokwium SQL wszystko:
  2. -- czesc I
  3.  
  4. --zadanie 1 - pokaz wszystkie informajce o dostawcach
  5. SELECT * FROM ZAJECIA.DOSTAWCY
  6.  
  7. --zadanie 2 - pokaz nazwy firm, adresy oraz miasta dostpnych dostawcĂłw
  8. SELECT NAZWAFIRMY, ADRES, MIASTO FROM ZAJECIA.DOSTAWCY
  9.  
  10. --zadanie 3 - pokaz informacje o dostawcach posortowane według miejscowosc
  11. SELECT * FROM ZAJECIA.DOSTAWCY
  12. ORDER BY MIASTO
  13.  
  14. --zadanie 4 - Pokaz miasta, w ktorych znajduja sie lokalizacje dostawcow
  15. SELECT DISTINCT MIASTO FROM ZAJECIA.DOSTAWCY
  16. ORDER BY MIASTO
  17.  
  18. --zadanie 5 - Pokaz firmy pochodzace z Bytomia. Nazwa firmy ma byla zapisana duzymi literami (UPPER/LOWER). Pierwsze litery maja byc duze (INITCAP)
  19. SELECT * FROM ZAJECIA.DOSTAWCY
  20. WHERE MIASTO LIKE 'Bytom'
  21.  
  22. SELECT Upper(NAZWAFIRMY) AS duze, LOWER(NAZWAFIRMY) AS male, INITCAP(NAZWAFIRMY) AS normalnie, MIASTO FROM ZAJECIA.DOSTAWCY
  23. WHERE MIASTO LIKE 'Bytom'
  24.  
  25. --zadanie 6 - Pokaz firmy pohodzace z Bytomia i Katowic
  26. SELECT NAZWAFIRMY, MIASTO FROM ZAJECIA.DOSTAWCY
  27. WHERE MIASTO IN ('Bytom', 'Katowice')
  28.  
  29. --zadanie 7 - Pokaaz firmy, ktorych nazwy zaczynaja sie na litere B
  30. SELECT * FROM ZAJECIA.DOSTAWCY
  31. WHERE NAZWAFIRMY LIKE 'B%'
  32.  
  33. --zadanie 8 - Pokaz firmy, ktorych nazwa jest dluzsza niz 10 znakow
  34. SELECT * FROM ZAJECIA.DOSTAWCY
  35. WHERE LENGTH(NAZWAFIRMY)>10
  36.  
  37. --zadanie 9 - Pokaz firmy, ktorych dwie pierwsze cyfry kodu zaczynaja sie na 23
  38. SELECT * FROM ZAJECIA.DOSTAWCY
  39. WHERE SUBSTR(KODPOCZTOWY,1,2)=23
  40.  
  41. --zadanie 10 - Pokaz firmy, ktorych dwie ostatnie cyfry kodu pocztowego koncza sie na 33
  42. SELECT * FROM ZAJECIA.DOSTAWCY
  43. WHERE SUBSTR(KODPOCZTOWY,4,2)=23
  44.  
  45. --zadanie 11 - Pokaz towary, ktorych jest mniej niz minimum okreslone dla danego towaru
  46. WHERE ilosc < STANMINIMUM
  47.  
  48. --zadanie 12 - Pokaz nazw towaru oraz ilosc, jaka jets niezbedna do zakupu, aby stan magazynowy przekroczyl minimalna ilosc
  49. SELECT NAZWAPRODUKTU, ILOSC, STANMINIMUM, (STANMINIMUM-ILOSC+1) AS do_zakupu FROM ZAJECIA.PRODUKTY
  50. WHERE ilosc < STANMINIMUM
  51.  
  52. --zadanie 13 - Pokaz nazwe towaru, adres sprzedawcy oraz ilosc towarow, ktore musimy zakupic, aby stan na magazynie przekroczyl minimalna wartosc o 100 jednostek
  53. SELECT NAZWAPRODUKTU,d.ADRES, ILOSC, STANMINIMUM, (STANMINIMUM-ILOSC+100) AS do_zakupu FROM ZAJECIA.PRODUKTY p JOIN ZAJECIA.DOSTAWCY d ON p.IDDOSTAWCY=d.IDDOSTAWCY
  54. WHERE STANMINIMUM>ILOSC
  55.  
  56. --zadanie 14 - pokaz produkty, ktore zostaly wycofane
  57. SELECT * FROM ZAJECIA.PRODUKTY
  58. WHERE WYCOFANY=1
  59.  
  60. --zadanie 15 - pokaz wszystkich pracownikow
  61. SELECT * FROM ZAJECIA.PRACOWNICY
  62.  
  63. --zadanie 16 - pokaz pracownikow urodzonych przed 1960-01-01
  64. SELECT * FROM ZAJECIA.PRACOWNICY p
  65. WHERE EXTRACT(YEAR FROM p.DATAURODZENIA )<1960
  66.  
  67. --zadanie 17 - sprawdz czy data urodzenia pracownika n ie jest wieksza od daty zatrudniania
  68. SELECT * FROM ZAJECIA.PRACOWNICY
  69. WHERE DATAURODZENIA > DATAZATRUDNIENIA
  70.  
  71. --zadanie 18 - pokaz jaka jest srenia placa w firmie
  72. SELECT round(avg(PLACA),2) AS srednie_zarobki FROM ZAJECIA.PRACOWNICY
  73.  
  74. --zadanie 19 - pokaz, jaka jest najmniejsza, najwieksza i srednia placa w firmie
  75. SELECT min(PLACA) AS minimalna_placa, MAX(PLACA)AS placa_maksymalna, avg(placa) AS srednia_placa FROM ZAJECIA.PRACOWNICY
  76.  
  77. --zadanie 20 - pokaz srednie zarobki na stanowisku przedstawiciel handlowy.
  78. --dodaj symbol dolara do wyniku
  79. SELECT avg(PLACA) AS srednia_pensja, to_char(avg(placa), '$9,999.99') z_dolarem FROM ZAJECIA.PRACOWNICY
  80. WHERE STANOWISKO LIKE 'Przedstawiciel%'
  81.  
  82. --zadanie 21 - pokaz srednie zarobki w kazdym miescie
  83. SELECT avg(PLACA), MIASTO FROM ZAJECIA.PRACOWNICY
  84. GROUP BY MIASTO
  85.  
  86. --zadanie 22 - pokaz ilosc pracownikow w kazdym miescie
  87. SELECT count(IDPRACOWNIKA) AS ilsoc_pracownikow, MIASTO FROM ZAJECIA.PRACOWNICY
  88. GROUP BY MIASTO
  89.  
  90. --zadanie 23 - pokaz miasta, w ktorych ilosc pracownikow jest wieksza niz 2
  91.  
  92. SELECT count(IDPRACOWNIKA) AS ilosc, MIASTO FROM ZAJECIA.PRACOWNICY
  93. GROUP BY MIASTO
  94. having count(IDPRACOWNIKA) > 2
  95.  
  96. --zadanie 24 - pokaz wiek kazdej osoby (Months_between + trunc)
  97. SELECT imie, NAZWISKO, trunc(MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)/12) AS wiek FROM ZAJECIA.PRACOWNICY
  98.  
  99. -- zadanie 25 pokaz sredni wiek na kazdym stanowisku
  100. SELECT avg(trunc(MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)/12)) AS sredni_wiek, STANOWISKO FROM ZAJECIA.PRACOWNICY
  101. GROUP BY STANOWISKO
  102.  
  103. -- zadanie 26 pokaz wiek pracownikow za 10 miesiecy
  104. SELECT NAZWISKO, trunc(MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)/12) AS wiek,
  105. trunc((MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)+10)/12) AS wiek_za_10_mscy
  106. FROM ZAJECIA.PRACOWNICY
  107.  
  108. --zadanie 27 - pokaz trzy najlepiej zarabiajace osoby w firmie
  109. SELECT * FROM (
  110. SELECT NAZWISKO, PLACA FROM ZAJECIA.PRACOWNICY
  111. ORDER BY PLACA DESC)
  112. WHERE rownum <=3
  113.  
  114. --zadanie 28 - pokaz towary dostarczone przez XYZ
  115. SELECT DISTINCT NAZWAPRODUKTU, d.NAZWAFIRMY FROM ZAJECIA.PRODUKTY p INNER JOIN ZAJECIA.DOSTAWCY d ON p.IDDOSTAWCY=d.IDDOSTAWCY
  116. WHERE d.NAZWAFIRMY LIKE 'XYZ'
  117.  
  118. --zadanie 29 - pokaz produkty firmy Polinax, ktorych ilosc jest mniejsza niz 10
  119. SELECT NAZWAPRODUKTU, d.NAZWAFIRMY FROM ZAJECIA.PRODUKTY p INNER JOIN ZAJECIA.DOSTAWCY d ON p.IDDOSTAWCY=d.IDDOSTAWCY
  120. WHERE d.NAZWAFIRMY='Polinax' AND ILOSC<10
  121.  
  122. --zadania 30 - Pokaz produkty firm pochodzacych z bytomia
  123. SELECT NAZWAPRODUKTU, d.NAZWAFIRMY, d.MIASTO FROM ZAJECIA.PRODUKTY p INNER JOIN ZAJECIA.DOSTAWCY d ON p.IDDOSTAWCY=d.IDDOSTAWCY
  124. WHERE miasto='Bytom'
  125.  
  126.  
  127. --zadanie 31- Pokaz srednia ilosc produktow kazdego dostawy w magazynie
  128. SELECT NAZWAPRODUKTU, avg(ilosc) AS srednia_ilosc, d.NAZWAFIRMY FROM ZAJECIA.PRODUKTY p INNER JOIN ZAJECIA.DOSTAWCY d ON p.IDDOSTAWCY=d.IDDOSTAWCY
  129. GROUP BY d.NAZWAFIRMY, NAZWAPRODUKTU
  130.  
  131. --zadanie 32 - pokaz ilosc zamowien kazdego klienta
  132. SELECT count(IDZAMOWIENIA) AS ilosc_zamowien, IDKLIENTA FROM ZAJECIA.ZAMOWIENIA
  133. GROUP BY IDKLIENTA
  134. ORDER BY IDKLIENTA
  135.  
  136. --zadanie 33 - pokaz sumaryczne ilosc zamowien dla klientow aktywnych
  137. SELECT sum(z.IDZAMOWIENIA) AS suma_zamowien FROM ZAJECIA.KLIENCI k INNER JOIN ZAJECIA.ZAMOWIENIA z ON k.IDKLIENTA=z.IDKLIENTA
  138. WHERE AKTYWNY=1
  139.  
  140. --zadanie 34 - ilosc towarow dostarczone przez dostawcow
  141.  
  142. -- wszystkie towary
  143. SELECT sum(ilosc) AS suma_towarow FROM ZAJECIA.DOSTAWCY d INNER JOIN ZAJECIA.PRODUKTY p ON d.IDDOSTAWCY=p.IDDOSTAWCY
  144.  
  145. --ilosc toarow dostarczona przez kazdego dostawcow
  146. SELECT sum(ilosc) AS suma, NAZWAFIRMY FROM ZAJECIA.DOSTAWCY d INNER JOIN ZAJECIA.PRODUKTY p ON d.IDDOSTAWCY=p.IDDOSTAWCY
  147. GROUP BY NAZWAFIRMY
  148.  
  149. --zadanie 35 określ w jakim dniu roku 1997 firma zanotowała najwiekszy zysk
  150. SELECT * FROM (
  151. SELECT DATAZAMOWIENIA, (o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS zysk FROM ZAJECIA.ZAMOWIENIA z INNER JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  152. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  153. ORDER BY zysk DESC)
  154. WHERE rownum=1
  155.  
  156. --zadanie 36. Podaj sumaryczne przychody ze sprzedazy dla danego klienta
  157. SELECT zajecia.KLIENCI.IDKLIENTA, sum((zajecia.OPISY_ZAMOWIEN.CENAJEDNOSTKOWA*zajecia.OPISY_ZAMOWIEN.ILOSC)*(1-zajecia.OPISY_ZAMOWIEN.RABAT)) AS przychody
  158. FROM zajecia.KLIENCI JOIN ZAJECIA.ZAMOWIENIA ON zajecia.KLIENCI.IDKLIENTA=zajecia.ZAMOWIENIA.IDKLIENTA
  159. JOIN ZAJECIA.OPISY_ZAMOWIEN ON zajecia.ZAMOWIENIA.IDZAMOWIENIA=zajecia.OPISY_ZAMOWIEN.IDZAMOWIENIA
  160. GROUP BY zajecia.KLIENCI.IDKLIENTA
  161.  
  162. -- 37. Pokaz jak ksztaltuje sie wielkosc sprzedazy towarow w danym dniu miesiaca na przelomie wszystkich lat, ktore znajduja sie w bazie
  163. SELECT DISTINCT EXTRACT(DAY FROM z.DATAZAMOWIENIA) AS dzien, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma FROM ZAJECIA.ZAMOWIENIA z INNER JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  164. GROUP BY EXTRACT(DAY FROM z.DATAZAMOWIENIA)
  165. ORDER BY EXTRACT(DAY FROM z.DATAZAMOWIENIA)
  166.  
  167. --38. Okresl w jak ksztaltuje sie wielkosc sprzedazy towarow w danym dniu miesiaca na przelomie wszystkich lat dla towaru Tofu
  168. SELECT DISTINCT EXTRACT(DAY FROM z.DATAZAMOWIENIA) AS dzien, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma FROM ZAJECIA.ZAMOWIENIA z INNER JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  169. INNER JOIN ZAJECIA.PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU
  170. WHERE p.NAZWAPRODUKTU LIKE 'Tofu'
  171. GROUP BY EXTRACT(DAY FROM z.DATAZAMOWIENIA)
  172. ORDER BY EXTRACT(DAY FROM z.DATAZAMOWIENIA)
  173.  
  174. -- 39 Pokaz sumaryczna kwote rabatow dla kazdego klienta
  175. SELECT sum(CENAJEDNOSTKOWA*ILOSC*RABAT) AS suma, z.IDKLIENTA FROM ZAJECIA.OPISY_ZAMOWIEN p INNER JOIN ZAJECIA.ZAMOWIENIA z ON p.IDZAMOWIENIA=z.IDZAMOWIENIA
  176. GROUP BY z.IDKLIENTA
  177.  
  178. -- 40 Pokaz sumaryczna kwote rabatow dla kazdej kategorii towaru
  179. SELECT sum(o.ILOSC*o.CENAJEDNOSTKOWA*o.RABAT) AS suma_rabatu,p.IDKATEGORII FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECIA.PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU
  180. GROUP BY p.IDKATEGORII
  181. ORDER BY p.IDKATEGORII
  182.  
  183. -- 41 Pokaz zamowienia, w ktorych cena sprzedazy jest wyzsza od ceny katalogowej ?
  184. SELECT p.IDPRODUKTU, o.IDZAMOWIENIA, p.CENAJEDNOSTKOWA AS cena_sprzedazy, o.CENAJEDNOSTKOWA AS cena_katalogowa
  185. FROM ZAJECIA.PRODUKTY p INNER JOIN ZAJECIA.OPISY_ZAMOWIEN o ON p.IDPRODUKTU=o.IDPRODUKTU
  186. WHERE p.CENAJEDNOSTKOWA>o.CENAJEDNOSTKOWA
  187.  
  188. -- 42 Pokaz klientow, ktorzy nie otrzymali jeszcze rabatow.
  189. SELECT z.IDZAMOWIENIA, RABAT FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  190. WHERE RABAT=0
  191.  
  192. -- 43 Pokaz zarobki z kaĹĽdego produktu
  193. SELECT p.IDPRODUKTU, sum((p.CENAJEDNOSTKOWA-o.CENAJEDNOSTKOWA)*p.ilosc) AS zarobek
  194. FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECIA.PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU
  195. GROUP BY p.IDPRODUKTU
  196. ORDER BY p.IDPRODUKTU
  197.  
  198. -- 44 Pokaz zarobek na kazdym dostawcy
  199. SELECT d.NAZWAFIRMY, sum(o.ILOSC*o.CENAJEDNOSTKOWA*(1-o.RABAT)) AS zarobki
  200. FROM ZAJECIA.OPISY_ZAMOWIEN o
  201. INNER JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  202. INNER JOIN ZAJECIA.PRODUKTY p ON p.IDPRODUKTU=o.IDPRODUKTU
  203. JOIN ZAJECIA.DOSTAWCY d ON p.IDDOSTAWCY=d.IDDOSTAWCY
  204. GROUP BY d.NAZWAFIRMY
  205.  
  206. -- 45 Pokaz ilosc sprzedawanych produktow w roku 1997
  207. SELECT sum(ILOSC) FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  208. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  209.  
  210. -- 46 Okresl jaka jest najmniejsza ilosc towarow w danej kategorii
  211. SELECT sum(p.STANMINIMUM) AS najmniejsza_ilosc_towaru,NAZWAKATEGORII FROM ZAJECIA.KATEGORIE k INNER JOIN ZAJECIA.PRODUKTY p ON k.IDKATEGORII=p.IDKATEGORII
  212. GROUP BY k.NAZWAKATEGORII
  213.  
  214. -- 47 Pokaz te zamowienia, w ktorych stosunek rabatu do wartosci zamowienia jest wiekszy niz 20%
  215. SELECT * FROM ZAJECIA.OPISY_ZAMOWIEN
  216. WHERE (ILOSC*CENAJEDNOSTKOWA)/(RABAT*CENAJEDNOSTKOWA*ILOSC)>1/4
  217.  
  218. -- 48 Pokaz 3 produkty, ktore najczesciej wystepowaly na fakturach
  219. SELECT * FROM
  220. (SELECT p.NAZWAPRODUKTU, COUNT(IDZAMOWIENIA) AS ilosc_zamowien FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECIA.PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU
  221. GROUP BY p.NAZWAPRODUKTU
  222. ORDER BY 2 DESC)
  223. WHERE rownum<=3
  224.  
  225. -- 49 Okresl, ktore firmy, jakie produkty oraz w jakiej ilosci najczesciej wystepowaly (3 rekordy)
  226.  
  227. -- 50 Okresl, jaka jest srednia roznica w dniach czasu wysylki towarow dla danego pracownika
  228. SELECT IDPRACOWNIKA, trunc(avg(DATAWYSYLKI-DATAZAMOWIENIA)) AS średnia_rożnica FROM ZAJECIA.ZAMOWIENIA
  229. GROUP BY IDPRACOWNIKA
  230.  
  231. -- 51 Wskaz 3 pracownikow, ktorzy obsluguja najmniejsza ilosc klientow aktywnych
  232. SELECT * FROM (SELECT z.IDPRACOWNIKA, COUNT(z.IDKLIENTA) AS ilosc_klientow FROM ZAJECIA.ZAMOWIENIA z INNER JOIN ZAJECIA.KLIENCI k ON z.IDKLIENTA=k.IDKLIENTA
  233. WHERE k.AKTYWNY=1
  234. GROUP BY IDPRACOWNIKA
  235. ORDER BY 2 )
  236. WHERE rownum<=3
  237.  
  238. -- 52 Okresl, jaki jest sredni czas wysylki towarow do klientow wedlug miejscowosci, do ktorej towar bedzie wysylany
  239. SELECT avg(DATAWYSYLKI-DATAZAMOWIENIA) AS sredni_czas_wysylki, k.MIASTO FROM ZAJECIA.ZAMOWIENIA z INNER JOIN ZAJECIA.KLIENCI k ON z.IDKLIENTA=k.IDKLIENTA
  240. GROUP BY k.MIASTO
  241. ORDER BY 1
  242.  
  243. -- 53 Okresl dla ktorych pracownikow czas wysylki towaru od dnia zamowien ia jest wiekszy niz 20 dni.
  244. SELECT DISTINCT IDPRACOWNIKA, trunc(DATAWYSYLKI-DATAZAMOWIENIA)
  245. FROM ZAJECIA.ZAMOWIENIA
  246. WHERE trunc(DATAWYSYLKI-DATAZAMOWIENIA) > 20
  247. ORDER BY IDPRACOWNIKA ASC
  248.  
  249. -- 54 Dokonaj zsumowania tej ilsoci dla kazdego pracownika.
  250. SELECT IDPRACOWNIKA, sum(trunc(DATAWYSYLKI-DATAZAMOWIENIA)) AS iosc_dni FROM ZAJECIA.ZAMOWIENIA
  251. WHERE trunc(DATAWYSYLKI-DATAZAMOWIENIA)>20
  252. GROUP BY IDPRACOWNIKA
  253.  
  254. -- 55 Okresl jaka jest srednia wieku pracownikow
  255. SELECT round(avg(trunc(MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)/12))) AS sredni_wiek FROM ZAJECIA.PRACOWNICY
  256.  
  257. -- 56 Okresl, jaka jest srednia wieku pracownikow wedlug stanowisk
  258. SELECT round(avg(MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)/12)) AS sredni_wiek, STANOWISKO FROM ZAJECIA.PRACOWNICY
  259. GROUP BY STANOWISKO
  260.  
  261. -- 57 Podaj wiek, imie, nazwisko pracownika ,ktory przeprowadzil najwiecej transakcji
  262. SELECT * FROM (
  263. SELECT imie, NAZWISKO, (trunc(MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)/12)) AS wiek, COUNT(z.IDZAMOWIENIA) AS ilosc_transakcji FROM ZAJECIA.PRACOWNICY p INNER JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA
  264. GROUP BY IMIE, NAZWISKO, trunc(MONTHS_BETWEEN(CURRENT_DATE, DATAURODZENIA)/12)
  265. ORDER BY COUNT(z.IDZAMOWIENIA) DESC)
  266. WHERE rownum=1
  267.  
  268. --58. pokaz produkty, ktore maja najwieksza cene jednostkowa
  269. SELECT NAZWAPRODUKTU, CENAJEDNOSTKOWA FROM ZAJECIA.PRODUKTY
  270. ORDER BY CENAJEDNOSTKOWA DESC
  271.  
  272. --59. Znajdz produkty, ktorych jest najmniej na magazynie
  273. SELECT NAZWAPRODUKTU, ILOSC FROM ZAJECIA.PRODUKTY
  274. ORDER BY ILOSC
  275.  
  276. --60. Ktorego napoju jest najmniej na magazynie?
  277. SELECT * FROM (SELECT p.NAZWAPRODUKTU, p.ILOSC FROM ZAJECIA.KATEGORIE k INNER JOIN ZAJECIA.PRODUKTY p ON k.IDKATEGORII=p.IDKATEGORII
  278. WHERE NAZWAKATEGORII='Napoje'
  279. ORDER BY p.ILOSC )
  280. WHERE rownum=1
  281.  
  282. --61. Znajdz produkty, ktorych jest mniej niz srednia ilosc napojow na magazynie
  283. SELECT * FROM ZAJECIA.PRODUKTY p INNER JOIN ZAJECIA.KATEGORIE k on p.IDKATEGORII=k.IDKATEGORII
  284. WHERE ILOSC< (SELECT avg(ILOSC) FROM ZAJECIA.PRODUKTY p INNER JOIN ZAJECIA.KATEGORIE k on p.IDKATEGORII=k.IDKATEGORII WHERE k.NAZWAKATEGORII='Napoje' )
  285.  
  286. --62. Znajdz pracownikow, ktorzy najmniej zarabiaja
  287. SELECT * FROM ZAJECIA.PRACOWNICY
  288. ORDER BY PLACA ASC
  289.  
  290. --63. Znajdz pracownikow, ktorzy najwiecej zarabiaja
  291. SELECT * FROM ZAJECIA.PRACOWNICY
  292. ORDER BY placa DESC
  293.  
  294. --64. Ktory klient otrzymal najwyzszy rabat?
  295. select z.IDKLIENTA, sum(RABAT*CENAJEDNOSTKOWA*ILOSC) AS suma_rabatow FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECia.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  296. GROUP BY z.IDKLIENTA
  297. ORDER BY sum(RABAT*CENAJEDNOSTKOWA*ILOSC) DESC
  298.  
  299. --65. Ktory klient zakupil najwieksza ilosc towarow?
  300. SELECT * FROM (SELECT z.IDKLIENTA, sum(ILOSC)AS ilosc_towarow FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  301. GROUP BY z.IDKLIENTA
  302. ORDER BY sum(ILOSC)DESC)
  303. WHERE rownum=1
  304.  
  305. --66. Okresl, ktory klient wykonal najwiecej zamowien
  306. SELECT * FROM (SELECT IDKLIENTA, COUNT(IDZAMOWIENIA) AS ilosc_zamowien FROM ZAJECIA.ZAMOWIENIA
  307. GROUP BY IDKLIENTA
  308. ORDER BY COUNT(IDZAMOWIENIA) desc)
  309. WHERE rownum=1
  310.  
  311. --67. Okresl, ktory pracownik wykonal najwiecej transakcji sprzedazy w roku 1996?
  312.  
  313. SELECT z.IDPRACOWNIKA, count(z.IDZAMOWIENIA) AS ilosc_transakcji FROM ZAJECIA.OPISY_ZAMOWIEN o INNER JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  314. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1996
  315. GROUP BY z.IDPRACOWNIKA
  316. ORDER BY count(z.IDZAMOWIENIA) desc
  317.  
  318. --68. Okresl, w ktorej kategorii towarow jest srednio wiecej towarow niz w napojach?
  319. SELECT NAZWAKATEGORII, avg(o.ILOSC) średnia FROM ZAJECIA.KATEGORIE k JOIN ZAJECIA.PRODUKTY o ON k.IDKATEGORII=o.IDKATEGORII
  320. GROUP BY NAZWAKATEGORII
  321. HAVING avg(o.ILOSC)> (SELECT avg(o.ILOSC) FROM ZAJECIA.KATEGORIE k JOIN ZAJECIA.PRODUKTY o ON k.IDKATEGORII=o.IDKATEGORII WHERE NAZWAKATEGORII= 'Napoje')
  322.  
  323. --69. Okresl, ktorzy pracownicy obsluguja wiecej klientow niz pracownik King?
  324. SELECT COUNT(z.IDKLIENTA) AS ilosc_klientow, NAZWISKO FROM ZAJECIA.PRACOWNICY p INNER JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA
  325. GROUP BY NAZWISKO
  326. HAVING COUNT(z.IDKLIENTA) > (SELECT COUNT(z.IDKLIENTA) FROM ZAJECIA.PRACOWNICY p INNER JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA
  327. WHERE NAZWISKO='King')
  328. ORDER BY COUNT(z.IDKLIENTA)
  329.  
  330. --70. Podaj miasta, w ktĂłrych mieszkajÄ… nasi pracownicy, a w ktorych nie znajduje sie zaden nasz klient
  331.  
  332. SELECT DISTINCT p.miasto FROM ZAJECIA.PRACOWNICY
  333. WHERE p.MIASTO NOT IN (SELECT MIASTO FROM ZAJECIA.KLIENCI)
  334.  
  335. --71. Podaj nazwy firm, które złożyły zamówienia na miesiąc przed najstarszym zamówieniem
  336. SELECT IDKLIENTA, (SELECT max(DATAZAMOWIENIA) FROM ZAJECIA.ZAMOWIENIA)-z.DATAZAMOWIENIA AS roznica_dni FROM ZAJECIA.ZAMOWIENIA z
  337. WHERE (SELECT max(DATAZAMOWIENIA) FROM ZAJECIA.ZAMOWIENIA)-z.DATAZAMOWIENIA <=31
  338.  
  339. --72. Dla kazdego produktu podaj maksymalna liczbe zamowionych jednostek
  340. SELECT IDPRODUKTU, max(ILOSC) FROM ZAJECIA.OPISY_ZAMOWIEN
  341. GROUP BY IDPRODUKTU
  342. ORDER BY 1
  343.  
  344. --73. Podaj, jaka byla najwieksza ilosc zamowionych towarow przypadajaca na jedno zamowienie w odpowiednich kategoriach towarow
  345. SELECT idkategorii, max(o.ilosc)
  346. FROM ZAJECIA.OPISY_ZAMOWIEN o
  347. JOIN ZAJECIA.PRODUKTY p ON p.IDPRODUKTU=o.IDPRODUKTU
  348. GROUP BY idkategorii
  349.  
  350. --74. Okresl najtanszy towar u danego dostawcy
  351. SELECT min(CENAJEDNOSTKOWA), IDDOSTAWCY FROM ZAJECIA.PRODUKTY
  352. GROUP BY IDDOSTAWCY
  353. ORDER BY 1
  354.  
  355. --- czesc analityczna I
  356.  
  357. --1. Pokaz nazwe produktu, nazwe firmy, kategorie produktu oraz sume sprzedazy.
  358. SELECT p.NAZWAPRODUKTU, k.nazwafirmy, p.IDKATEGORII, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma
  359. FROM PRODUKTY p
  360. INNER JOIN OPISY_ZAMOWIEN o ON o.IDPRODUKTU=p.IDPRODUKTU
  361. INNER JOIN DOSTAWCY d ON d.IDDOSTAWCY=p.IDDOSTAWCY
  362. INNER JOIN ZAMOWIENIA z ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  363. INNER JOIN KLIENCI k ON k.IDKLIENTA=z.IDKLIENTA
  364. GROUP BY p.NAZWAPRODUKTU, k.nazwafirmy, p.IDKATEGORII
  365.  
  366. --2. Dla kategorii 1 oraz produktu Chang pokaż jakie firmy go kupowały oraz dla każdej z nich pokaż sum wartości jej zakupów. Dodatkowo pokaż sum całkowitej sprzedaży.
  367. SELECT p.NAZWAPRODUKTU, k.nazwafirmy, p.IDKATEGORII, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma
  368. FROM PRODUKTY p
  369. INNER JOIN OPISY_ZAMOWIEN o ON o.IDPRODUKTU=p.IDPRODUKTU
  370. INNER JOIN DOSTAWCY d ON d.IDDOSTAWCY=p.IDDOSTAWCY
  371. INNER JOIN ZAMOWIENIA z ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  372. INNER JOIN KLIENCI k ON k.IDKLIENTA=z.IDKLIENTA
  373. WHERE p.IDKATEGORII = 1 AND p.NAZWAPRODUKTU LIKE 'Chang'
  374. GROUP BY ROLLUP (p.IDKATEGORII, p.NAZWAPRODUKTU, k.nazwafirmy)
  375. ORDER BY 3, 1, 2 DESC
  376.  
  377. --3. Podaj nazwy firmy oraz nazwy produktow a takze sume wartosci sprzedazy dla nich. Nie ma byc generowane podsumowanie dla samych firm oraz samych nazw produktow.
  378. SELECT k.NAZWAFIRMY, p.NAZWAPRODUKTU, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma_sprz
  379. FROM PRODUKTY p
  380. INNER JOIN OPISY_ZAMOWIEN o ON p.IDPRODUKTU=o.IDPRODUKTU
  381. INNER JOIN ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  382. INNER JOIN KLIENCI k ON k.IDKLIENTA=z.IDKLIENTA
  383. GROUP BY k.NAZWAFIRMY, rollup(p.NAZWAPRODUKTU)
  384. ORDER BY 1, 3 DESC
  385.  
  386. --4.Wyknaj pol kostke dla produktow Tofu oraz Chai prezentujac nazwe produktu oraz klienta wedlug wartosci sprzedazy
  387. SELECT k.NAZWAFIRMY, p.NAZWAPRODUKTU, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma_sprz
  388. FROM PRODUKTY p
  389. INNER JOIN OPISY_ZAMOWIEN o ON p.IDPRODUKTU=o.IDPRODUKTU
  390. INNER JOIN ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  391. INNER JOIN KLIENCI k ON k.IDKLIENTA=z.IDKLIENTA
  392. WHERE p.NAZWAPRODUKTU IN ('Tofu', 'Chai')
  393. GROUP BY cube(k.NAZWAFIRMY, p.NAZWAPRODUKTU)
  394. ORDER BY 1, 2
  395.  
  396. --5. Dokonaj takiego przeksztalcenia zadania 4 aby w miejscach gdzie wystepuja wartosci NULL w podsumowaniu pojawil sie napis "wszystkie produkty" lub "wszystkie firmy"
  397. SELECT Decode (GROUPING(k.NAZWAFIRMY), 0, k.NAZWAFIRMY, '===WSZYSTKIE FIRMY===') AS nazwa_firmy,
  398. DECODE(GROUPING(p.NAZWAPRODUKTU), 0, p.NAZWAPRODUKTU, '===WSZYSTKIE PRODUKTY===') AS nazwa_produktu,
  399. sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma_sprz
  400. FROM PRODUKTY p
  401. INNER JOIN OPISY_ZAMOWIEN o ON p.IDPRODUKTU=o.IDPRODUKTU
  402. INNER JOIN ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  403. INNER JOIN KLIENCI k ON k.IDKLIENTA=z.IDKLIENTA
  404. WHERE p.NAZWAPRODUKTU IN ('Tofu', 'Chai')
  405. GROUP BY cube(k.NAZWAFIRMY, p.NAZWAPRODUKTU)
  406. ORDER BY 1, 2
  407.  
  408. --6. Prowadzimy analize sprzedazy realizowanej przez naszych pracownikow z podzialem na klientow. Okresl wartosc sprzedazy pracownika Peacock z podzialem na poszczegolnych klientow. Chcemy uzyskac sume wartosci sprzedazy tego pracownika oraz sume wartosci sprzedazy dla kazdego z klientow.
  409. SELECT NAZWISKO, k.NAZWAFIRMY, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS wartosc FROM ZAJECIA.PRACOWNICY p JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA JOIN ZAJECIA.KLIENCI k ON z.IDKLIENTA=k.IDKLIENTA INNER JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  410. WHERE p.NAZWISKO='Peacock'
  411. GROUP BY GROUPING SETS ((NAZWISKO, k.NAZWAFIRMY), ())
  412.  
  413. -- 7. Prowadzimy analize sprzedazy realizowanej przez naszych pracownikow z podzialem na klientow. Okresl wartosc sprzedazy pracownika Peacock z podzialem na poszczegolnych klientow. Chcemy uzyskać sume wartosci sprzedazy tego pracownika oraz sume wartosci sprzedazy dla kazdego z klientow europejskich majacych status aktywny.
  414.  
  415. SELECT NAZWISKO, k.NAZWAFIRMY, k.KRAJ, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS sprzedaz
  416. FROM ZAJECIA.PRACOWNICY p JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA JOIN ZAJECIA.KLIENCI k ON z.IDKLIENTA=k.IDKLIENTA JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  417. WHERE NAZWISKO='Peacock' AND k.AKTYWNY=1 AND k.KRAJ NOT IN ('USA', 'Brazylia', 'Argentyna', '%anada')
  418. GROUP BY GROUPING SETS ((NAZWISKO, k.NAZWAFIRMY, k.kraj), ())
  419.  
  420. -- 8.Prowadzimy analize sprzedazy realizowanej przez naszych pracownikow z podzialem na sprzedawane produkty. Okresl jakie produkty sprzedawal pracownik Peacock. Chcemy uzyskac sume wartosci sprzedazy tego pracownika oraz sume wartosci sprzedazy dla kazdego z produktow.
  421. SELECT NAZWISKO, pr.NAZWAPRODUKTU, sum(pr.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS wartosc_sprzedazy
  422. FROM ZAJECIA.PRACOWNICY p JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA JOIN ZAJECIA.PRODUKTY pr ON o.IDPRODUKTU=pr.IDPRODUKTU
  423. WHERE NAZWISKO='Peacock'
  424. GROUP BY GROUPING SETS ((NAZWISKO, pr.NAZWAPRODUKTU), ())
  425.  
  426. --9.rowadzimy analize sprzedazy realizowanej przez naszych pracownikow z podzialem na sprzedawane produkty. Okresl jakie produkty sprzedawal pracownik Peacock. Chcemy uzyskac sume wartosci sprzedazy tego pracownika oraz sume wartosci sprzedazy dla kazdego z produktow, ale tylko dla napojow i transakcji z rozku 1997.
  427.  
  428. SELECT p.NAZWISKO, pr.NAZWAPRODUKTU
  429. FROM ZAJECIA.PRACOWNICY p JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA JOIN ZAJECIA.PRODUKTY pr ON o.IDPRODUKTU=pr.IDPRODUKTU JOIN ZAJECIA.KATEGORIE k ON pr.IDKATEGORII=k.IDKATEGORII
  430. WHERE p.NAZWISKO='Peacock' AND k.NAZWAKATEGORII='Napoje' AND extract(YEAR FROM z.DATAZAMOWIENIA)=1997
  431. GROUP BY GROUPING SETS((p.NAZWISKO, pr.NAZWAPRODUKTU), ())
  432.  
  433. --10.Zbuduj kostke ukazujaca informacje o ilosci transakcji oraz wartosci transakcji z podzialem na kategorie produktu, kraj klienta
  434.  
  435. SELECT count(z.IDZAMOWIENIA) AS ilosc_transakcji, sum(p.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma_wartosc_transakcji, k.IDKATEGORII, kl.KRAJ
  436. FROM ZAJECIA.ZAMOWIENIA z JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA JOIN ZAJECIA.PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU JOIN ZAJECIA.KATEGORIE k ON p.IDKATEGORII=k.IDKATEGORII JOIN ZAJECIA.KLIENCI kl ON kl.IDKLIENTA=z.IDKLIENTA
  437. GROUP BY cube(k.IDKATEGORII, kl.KRAJ)
  438.  
  439. -- 11.Zbuduj kostke ukazujaca ilosc transakcji oraz wartosc transakcji z podzialem na dany rok oraz stanowisko pracownika obslugujacego transakcje
  440. SELECT count(z.IDZAMOWIENIA)AS ilsoc_zamowien, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS wartosc, EXTRACT(YEAR FROM z.DATAZAMOWIENIA) AS rok_zmowienia, p.STANOWISKO
  441. FROM ZAJECIA.ZAMOWIENIA z JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA JOIN ZAJECIA.PRACOWNICY p ON z.IDPRACOWNIKA=p.IDPRACOWNIKA
  442. GROUP BY CUBE(extract(YEAR FROM z.DATAZAMOWIENIA), p.STANOWISKO)
  443.  
  444. -- funkcje analityczne rankingu
  445.  
  446. -- 1. Zdefiniuj rankin srednich zarobkow pracownikow na danym stanowsko pracy w kolejnosci malejacej
  447. SELECT STANOWISKO, avg(placa) AS srednia_płaca, RANK() over(ORDER BY avg(placa) DESC) AS ranking_płac
  448. FROM ZAJECIA.PRACOWNICY
  449. GROUP BY STANOWISKO
  450.  
  451. -- 2. znajdz maksymalnie dwa pordukty z danej kategorii, ktorych stan magazynowy jest ponizej minimalnego wolumenu produktu na magazynie i zaproponuj wielkos zakupu tak aby stan magazynowy zrownal sie ze stanem minimum
  452. SELECT * FROM (SELECT NAZWAPRODUKTU, k.NAZWAKATEGORII,STANMINIMUM-ILOSC AS ile_kupic,
  453. rank() OVER(PARTITION BY k.NAZWAKATEGORII ORDER BY (STANMINIMUM-ilosc) ASC)AS ranking FROM ZAJECIA.PRODUKTY p, ZAJECIA.KATEGORIE k
  454. WHERE p.IDKATEGORII=k.IDKATEGORII AND ILOSC<STANMINIMUM)
  455. WHERE ranking <=2
  456. ORDER BY 2
  457.  
  458. -- 3. pokaz 3 naljepiej zarabiajace osoby w firmie
  459. SELECT * FROM (
  460. SELECT NAZWISKO, PLACA, rank() OVER (ORDER BY PLACA DESC) ranking FROM ZAJECIA.PRACOWNICY)
  461. WHERE ranking<=2
  462.  
  463. -- 4. pokaz 3 produkty ktore najczejciej wystepowaly na fakturach
  464.  
  465. SELECT IDPRODUKTU, COUNT(IDZAMOWIENIA) AS ile, RANK() over(ORDER BY COUNT(IDZAMOWIENIA) DESC) RANK FROM ZAJECIA.OPISY_ZAMOWIEN
  466. GROUP BY IDPRODUKTU
  467.  
  468. -- 5. zbuduj ranking wartosci sprzedazy produktow. Ma pojawic sie wartosc sprzedazy nazwa produktu, oraz pozycja w rankingu
  469. SELECT NAZWAPRODUKTU, (CENAJEDNOSTKOWA*ILOSC) AS sprzedaz, rank() over(ORDER BY (CENAJEDNOSTKOWA*ILOSC) desc) ranking FROM ZAJECIA.PRODUKTY
  470.  
  471. --6. pokaz 3 produkty, ktorych wartosc sprzedazy w pierwszym kwartale 1997 byla najwieksza
  472.  
  473. SELECT p.NAZWAPRODUKTU, sum(o.ILOSC*o.CENAJEDNOSTKOWA*(1-o.RABAT)) AS sprzedaz,
  474. RANK() OVER(ORDER BY sum(o.ILOSC*o.CENAJEDNOSTKOWA*(1-o.RABAT)) DESC ) RANK
  475. FROM ZAJECIA.ZAMOWIENIA z JOIN ZAJECia.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA JOIN ZAJECIA.PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU
  476. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)= 1997 AND EXTRACT(MONTH FROM z.DATAZAMOWIENIA) BETWEEN 1 AND 3
  477. GROUP BY p.NAZWAPRODUKTU
  478.  
  479. -- 7. pokaz 3 pracownikoww ktorzy w roku 1998 mieli najwieksza wartosc sprzedanych napojow
  480. SELECT NAZWISKO, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))AS sprzedaz, RANK()OVER(ORDER BY sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) DESC )RANK
  481. FROM ZAJECIA.PRACOWNICY p JOIN ZAJECIA.ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA JOIN ZAJECIA.OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA JOIN ZAJECIA.PRODUKTY pr ON pr.IDPRODUKTU=o.IDPRODUKTU JOIN ZAJECIA.KATEGORIE k ON pr.IDKATEGORII=k.IDKATEGORII
  482. WHERE extract( YEAR FROM z.DATAZAMOWIENIA)=1998 AND k.NAZWAKATEGORII='Napoje'
  483. GROUP BY NAZWISKO
  484.  
  485. -- 8. pokaz 3 dostawcow ktorzy w roku 1997 dostarczyli towary o najwyzszej sumarycznej wartosci
  486.  
  487. SELECT d.NAZWAFIRMY, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS sprzedaz,
  488. RANK() over(ORDER BY sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))DESC) rank
  489. FROM ZAJECIA.DOSTAWCY d JOIN ZAJECIA.PRODUKTY p ON d.IDDOSTAWCY=p.IDDOSTAWCY JOIN ZAJECIA.OPISY_ZAMOWIEN o ON p.IDPRODUKTU=o.IDPRODUKTU JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  490. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  491. GROUP BY NAZWAFIRMY
  492.  
  493. -- 9. Pokaz 3 produkty, dla ktorych wartosc rabatow w roku 1999 byla najwysza
  494. SELECT NAZWAPRODUKTU, sum(o.ILOSC*o.CENAJEDNOSTKOWA*o.RABAT) AS suma_rabatu, RANK()over(ORDER BY sum(o.ILOSC*o.CENAJEDNOSTKOWA*o.RABAT)DESC) rank
  495. FROM ZAJECIA.OPISY_ZAMOWIEN o JOIN ZAJECIA.PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  496. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA )=1999
  497. GROUP BY p.NAZWAPRODUKTU
  498.  
  499. -- 10. Pokaz 3 produkty wycofane, ktore w roku 1996 sprzedawano w najmniejszej ilosci
  500. SELECT p.NAZWAPRODUKTU, o.ILOSC, RANK()OVER(ORDER BY o.ilosc asc) rank
  501. FROM ZAJECIA.PRODUKTY p JOIN ZAJECIA.OPISY_ZAMOWIEN o ON p.IDPRODUKTU=o.IDPRODUKTU JOIN ZAJECIA.ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  502. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1996 AND p.WYCOFANY=1
  503.  
  504. -- OKNA
  505.  
  506. -- --1. Aktualnie prowadzimy analizy sprzedazy naszych produktow w podziale na klientow.
  507. -- Potrzebujemy zestawienia ukazujacego klienta, date zamowienia, kwote za lata 1996,1997, 1998.
  508. -- Dodatkowo w tabeli ma pojawic sie pole ukazujace kroczaca zmiane salda w kolejnych okresach ukazujace saldo na koniec kazdego dnia.
  509.  
  510. SELECT k.NAZWAFIRMY,
  511. z.DATAZAMOWIENIA,
  512. (p.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS wartosc_zamowienia,
  513. sum(p.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) OVER (PARTITION BY k.NAZWAFIRMY ORDER BY z.DATAZAMOWIENIA)saldo
  514. FROM ZAJECIA.PRODUKTY p INNER JOIN OPISY_ZAMOWIEN o ON p.IDPRODUKTU=o.IDPRODUKTU
  515. INNER JOIN ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA
  516. INNER JOIN KLIENCI k ON z.IDKLIENTA=k.IDKLIENTA
  517. ORDER BY 2,1 asc
  518.  
  519. --- zad 2. Analizujemy sprzedaz naszych pracownikow. Interesuje nas caly okres sprzedazy produktow. Ktory pracownik w ujeciu polrocznym
  520. -- (3 miesiace naprzod i 3 miesiace wstecz) od daty sprzedazy wykaza sie najwieksza sprzedaza produktow w ujeciu ilosciowym?
  521.  
  522. SELECT IDPRACOWNIKA,
  523. DATAZAMOWIENIA,
  524. COUNT(*) OVER (PARTITION BY IDPRACOWNIKA ORDER BY DATAZAMOWIENIA
  525. RANGE BETWEEN INTERVAL '3' MONTH PRECEDING
  526. AND INTERVAL '3' MONTH FOLLOWING) AS count6_6
  527. FROM ZAMOWIENIA
  528. ORDER BY 1
  529.  
  530.  
  531. ---zad 3. Dla poszczegolnych pracownikow przedstaw zmiany ilosci transakcji ktore obluzyli w roku 1997 w ujeciu miesiecznym.
  532. -- Raport ma pokazywac nazwisko, miesiac, ilosc transakcji w danym miesiace oraz kolumne z suma narastajaca.
  533.  
  534. SELECT p.NAZWISKO, EXTRACT(MONTH FROM z.DATAZAMOWIENIA) AS miesiac, COUNT(o.IDZAMOWIENIA) AS ilosc,
  535. sum(COUNT(o.IDZAMOWIENIA))over(PARTITION BY p.NAZWISKO ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA)) suma
  536. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  537. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  538. GROUP BY GROUPING SETS((p.NAZWISKO, EXTRACT(MONTH FROM z.DATAZAMOWIENIA)), ())
  539. ORDER BY 1,2
  540.  
  541. -- zad 4. Dla poszczegolnych kategorii towarow przedstaw zmiany wartosci sprzedazy w ujeci miesiecznym w roku 1998.
  542. -- Na ekranie ma pojawic sie nazwa kategorii
  543.  
  544. -- saldo z miesiaca na miesiac
  545. SELECT k.NAZWAKATEGORII,
  546. EXTRACT(MONTH FROM z.DATAZAMOWIENIA) AS miesiac,
  547. sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS sprzedaz,
  548. sum(sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)))over(PARTITION BY k.NAZWAKATEGORII ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA))saldo
  549. FROM OPISY_ZAMOWIEN o INNER JOIN ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA INNER JOIN PRODUKTY p ON o.IDPRODUKTU=p.IDPRODUKTU INNER JOIN KATEGORIE k ON p.IDKATEGORII=k.IDKATEGORII
  550. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1998
  551. GROUP BY GROUPING SETS((k.NAZWAKATEGORII, EXTRACT(MONTH FROM z.DATAZAMOWIENIA)), ())
  552.  
  553. -- saldo z transakcji na transakcje
  554. SELECT k.NAZWAKATEGORII,
  555. EXTRACT(MONTH FROM z.DATAZAMOWIENIA) AS miesiac,
  556. o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT) AS sprz,
  557. sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))
  558. OVER (PARTITION BY k.NAZWAKATEGORII ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA)) AS saldo
  559. FROM KATEGORIE k
  560. INNER JOIN PRODUKTY p ON p.IDKATEGORII=k.IDKATEGORII
  561. INNER JOIN OPISY_ZAMOWIEN o ON o.IDPRODUKTU=p.IDPRODUKTU
  562. INNER JOIN ZAMOWIENIA z ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  563. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1998
  564.  
  565. -- zad 5 dla poszczególnych klientow przedstaw zmiany wartosci sprzedazy w ujeciu miesiecznym w roku 1997. na ekranie ma sie pojawić nazwa klienta, miesiac, wartosc sprzedazy i narastajaca suma wartosci spredazy
  566.  
  567. -- z miesiaca na miesiac
  568. SELECT k.NAZWAFIRMY,
  569. EXTRACT(MONTH FROM z.DATAZAMOWIENIA) AS miesiac,
  570. sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) AS suma,
  571. sum(sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)))over(PARTITION BY k.NAZWAFIRMY ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA)) zmiany
  572. FROM KLIENCI k INNER JOIN ZAMOWIENIA z ON k.IDKLIENTA=z.IDKLIENTA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  573. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  574. GROUP BY GROUPING SETS((k.NAZWAFIRMY,EXTRACT(MONTH FROM z.DATAZAMOWIENIA)), ())
  575. ORDER BY 1,2
  576.  
  577. -- po kazdej tran
  578. SELECT k.NAZWAFIRMY,
  579. EXTRACT(MONTH FROM z.DATAZAMOWIENIA) AS miesiac,
  580. o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT) AS suma,
  581. sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))over(PARTITION BY k.NAZWAFIRMY ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA)) zmiany
  582. FROM KLIENCI k INNER JOIN ZAMOWIENIA z ON k.IDKLIENTA=z.IDKLIENTA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  583. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  584. ORDER BY 1,2
  585.  
  586. --- FUNCKJE RAPORTUJACE
  587.  
  588. --1. Aktualnie prowadzimy analizy sprzedazy naszych produktow w podziale na klientow.
  589. -- Potrzebujemy zestawienia ukazujacego klienta, date zamowienia, kwote tego zamowienia za lata 96-98.
  590. --- Dodatkowo w tabeli ma sie pojawic pole kazujace sumaryczne saldo w calym okresie.
  591.  
  592. SELECT k.NAZWAFIRMY, z.DATAZAMOWIENIA, o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)AS kwota,
  593. sum( o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))over(PARTITION BY k.NAZWAFIRMY ORDER BY z.DATAZAMOWIENIA ) saldo
  594. FROM KLIENCI k INNER JOIN ZAMOWIENIA z ON k.IDKLIENTA=z.IDKLIENTA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  595. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA) BETWEEN 1996 AND 1998
  596. ORDER BY 1,2
  597.  
  598. -- --2. Analizujac zadanie pierwsz dokonaj takiej zmiany,
  599. -- aby zamiast klienta pojawila sie informacji o naszym pracowniku i wartosc sprzedanych produktow tylko w roku 1998
  600. SELECT p.NAZWISKO, z.DATAZAMOWIENIA, o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT) AS sprzedaz,
  601. sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))OVER(PARTITION BY p.NAZWISKO ORDER BY z.DATAZAMOWIENIA)wartosc
  602. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  603. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1998
  604.  
  605. -- 3. Przygotuj zestawienie ukazujace ilosc transakcji jakie zrealizowal pracownik w danym miesiacu w roku 1997
  606. -- oraz odchylenie od sredniej ilosci transakcji z calego roku. W raporcie ma pojawic sie nazwisko pracownika, miesiac, ilosc transakcji z tego miesiaca oraz kolumna ukazujaca sume wszystkich transakcji z calego roku podzielona prze 12.
  607. SELECT p.NAZWISKO, EXTRACT(MONTH FROM z.DATAZAMOWIENIA) AS miesiac, COUNT(z.IDZAMOWIENIA) AS ilosc,
  608. sum(COUNT(z.IDZAMOWIENIA))OVER(PARTITION BY p.NAZWISKO ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA)) sumka,
  609. sum(COUNT(z.IDZAMOWIENIA))OVER(PARTITION BY p.NAZWISKO ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA))/12 wtf,
  610. ( sum(COUNT(z.IDZAMOWIENIA))OVER(PARTITION BY p.NAZWISKO ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA)) - sum(COUNT(z.IDZAMOWIENIA))OVER(PARTITION BY p.NAZWISKO ORDER BY EXTRACT(MONTH FROM z.DATAZAMOWIENIA))/12 ) AS wtf2
  611. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  612. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  613. GROUP BY GROUPING SETS((p.NAZWISKO,EXTRACT(MONTH FROM z.DATAZAMOWIENIA)), ())
  614.  
  615. -- LAG/LEAD
  616.  
  617. --1. Pokaz zestawienie sprzedazy produktow z podzialem na firmy, ukazujace okresy w jakich saldo sprzedazy dla poszczegolnych klientow nie uleglo zmianie
  618. SELECT * FROM (SELECT k.NAZWAFIRMY, z.DATAZAMOWIENIA AS od_dnia,
  619. lead(z.DATAZAMOWIENIA,1)OVER(PARTITION BY k.NAZWAFIRMY ORDER BY z.DATAZAMOWIENIA) do_dnia,
  620. sum(o.CENAJEDNOSTKOWA*o.ILOSC)over(PARTITION BY k.NAZWAFIRMY ORDER BY z.DATAZAMOWIENIA)saldo
  621. FROM OPISY_ZAMOWIEN o INNER JOIN ZAMOWIENIA z ON o.IDZAMOWIENIA=z.IDZAMOWIENIA INNER JOIN KLIENCI k ON z.IDKLIENTA=k.IDKLIENTA
  622. ORDER BY z.DATAZAMOWIENIA)zestawienie
  623. WHERE zestawienie.od_dnia<>zestawienie.do_dnia
  624.  
  625. -- FIRST/LAST
  626.  
  627. -- dla kazdego roku znajdz dni w ktorych dany pracownik dokonał najwiekszej transakcji
  628. SELECT p.IMIE, p.NAZWISKO, to_char(z.DATAZAMOWIENIA, 'yyyy') rok,
  629. max(z.DATAZAMOWIENIA)keep (DENSE_RANK FIRST ORDER BY (o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)) desc) najlepszy_dzien,
  630. ROUND(max(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)),2) AS najwyzsza_wartosc
  631. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o on z.IDZAMOWIENIA=o.IDZAMOWIENIA
  632. GROUP BY IMIE, NAZWISKO, to_char(z.DATAZAMOWIENIA, 'yyyy')
  633. order BY 1,2,3,4
  634.  
  635. -- Funkcje rankingu hipotetycznego
  636.  
  637. -- 1 Podczas procesu rekrutacji zapytano przyszlego pracownika jakiego wynagrodzenia sie spodziewa. Odpowiedzial iz 3900$. Okresl na ktorym miejscu w rankingu plac w firmie by sie znalazl jezeli otrzymalby taka pensje
  638.  
  639. SELECT RANK(3900) WITHIN GROUP (ORDER BY PLACA desc) RANK FROM PRACOWNICY
  640.  
  641. -- 2 Jestesmy ciekawi na jakiej pozycji w rankingu klientow znajdzie sie firma ktĂłra dokonala 31 transakcji kupna
  642. SELECT RANK(31) WITHIN GROUP (ORDER BY COUNT(IDZAMOWIENIA)DESC)rank FROM ZAMOWIENIA
  643. GROUP BY IDKLIENTA
  644.  
  645. -- 3 Na jakiej pozycji znajdzie sie pracownik ktorego wartosc sprzedazy produktow wyniosla 1000
  646.  
  647. SELECT RANK(1000) WITHIN GROUP (ORDER BY suma DESC)rank FROM
  648. (SELECT p.NAZWISKO, sum(o.ILOSC*o.CENAJEDNOSTKOWA) AS suma
  649. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  650. GROUP BY p.NAZWISKO
  651. ORDER BY suma desc)
  652.  
  653. -- WIDTH BUCKET
  654.  
  655. -- 1 dla naszych klientów przewidzieliśmy rabaty na zakupy produktów. Chcemy aby rabaty naliczały si na bazie okresów minionych.System ma podzielić ilość zlecać na każcego klienta na 4 równoliczne grupy z przedziału 0-20 oraz ostatnia grupa ma stanowić klientów których ilość zleceń przekroczyła 20
  656.  
  657. select NAZWAFIRMY, COUNT(*) AS ilosc_tran, WIDTH_BUCKET(COUNT(*),0,20,4)*0.1 FROM KLIENCI k INNER JOIN ZAMOWIENIA z ON k.IDKLIENTA=z.IDKLIENTA
  658. GROUP BY NAZWAFIRMY
  659. ORDER BY 3
  660.  
  661. -- 2 nasi pracownicy zasluzyli na premie. Sprawdz w bazie ilosc zlecen jakie zrealizowali w roku 1997 i podziel pracownikĂłw na 3 grupy. Za kazdy przedzal wyzej pracownik ma otrzymac 500 zl premii.
  662. SELECT NAZWISKO, COUNT(z.IDZAMOWIENIA) AS ilosc, WIDTH_BUCKET(COUNT(z.IDZAMOWIENIA),0,200,3)AS grupa,
  663. WIDTH_BUCKET(COUNT(z.IDZAMOWIENIA),0,200,3)*500 AS premia
  664. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  665. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  666. GROUP BY NAZWISKO
  667.  
  668. -- 3 przygotuj identyczny raport jak w zad.2 jednak w tym zadaniu zastosuj nie ilosc zlecen, a ich wartosc
  669.  
  670. SELECT p.NAZWISKO, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))AS wartosc, WIDTH_BUCKET(sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)),0,100000,3) AS grupa,
  671. WIDTH_BUCKET(sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)),0,100000,3)*500 AS premia
  672. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  673. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  674. GROUP BY p.NAZWISKO
  675.  
  676. -- przygotuj kod sumujÄ…cy premie z zadan 2 i 3 oraz przygotuj zestawienie zsumowanÄ… premi jakÄ… uzyska pracownik za rok 1997
  677. SELECT p.NAZWISKO, sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT))AS wartosc, WIDTH_BUCKET(sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)),0,100000,3) AS grupa_za_T,
  678. WIDTH_BUCKET(sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)),0,100000,3)*500 AS premia_za_wartosc_trans,
  679. WIDTH_BUCKET(COUNT(z.IDZAMOWIENIA),0,200,3)AS grupa_za_ilosc_zam,
  680. WIDTH_BUCKET(COUNT(z.IDZAMOWIENIA),0,200,3)*500 AS premia_za_ilosc,
  681. WIDTH_BUCKET(COUNT(z.IDZAMOWIENIA),0,200,3)*500+ WIDTH_BUCKET(sum(o.CENAJEDNOSTKOWA*o.ILOSC*(1-o.RABAT)),0,100000,3)*500 AS CA�KOWITA_PREMIA
  682. FROM PRACOWNICY p INNER JOIN ZAMOWIENIA z ON p.IDPRACOWNIKA=z.IDPRACOWNIKA INNER JOIN OPISY_ZAMOWIEN o ON z.IDZAMOWIENIA=o.IDZAMOWIENIA
  683. WHERE EXTRACT(YEAR FROM z.DATAZAMOWIENIA)=1997
  684. GROUP BY p.NAZWISKO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement