Advertisement
dzocesrce

[BNP] DML Masterpiece

Dec 24th, 2024 (edited)
1,162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 17.65 KB | None | 0 0
  1. --1)Да се напише DML израз со кој ќе се вратат матичните броеви на лицата (сортирани во растечки редослед) кои биле позитивни и потоа примиле барем една доза вакцина.
  2.  
  3. SELECT DISTINCT L.id
  4. FROM Lice L JOIN Test T ON L.id=T.id JOIN Vakcinacija_datum VD ON L.id=VD.id_lice
  5. WHERE T.rezultat='pozitiven' AND T.datum<VD.datum
  6. ORDER BY L.id
  7.  
  8. --2)Да се напише DML израз со кој ќе се вратат имињата и презимињата на гитаристите (музичарите кои свират на инструментот гитара) кои настапиле на концерт заедно со бенд откако го напуштиле. Датумот на настап на музичарот заедно со бендот е датумот на самиот концерт. Резултатите треба да се подредени според името во растечки редослед.
  9.  
  10. SELECT ime,prezime
  11. FROM Muzicar
  12. WHERE Muzicar.id IN (SELECT MI.id_muzicar
  13. FROM Muzicar_instrument MI JOIN Muzicar_bend MB ON MI.id_muzicar=MB.id_muzicar JOIN Koncert_muzicar_bend KMB ON KMB.id_bend=MB.id_bend AND KMB.id_muzicar=MB.id_muzicar JOIN Koncert K ON K.id=KMB.id_koncert
  14. WHERE MI.instrument='gitara' AND datum_napustanje<datum)
  15.  
  16. --3)Да се напише DML израз со кој ќе се вратат името и презимето на корисниците кои во ист ден посетиле објекти кои се наоѓаат во соседни градови.
  17.  
  18. SELECT DISTINCT ime,prezime
  19. FROM Korisnik K JOIN Poseta P ON K.kor_ime=P.kor_ime JOIN Objekt O ON P.id_mesto=O.id_mesto JOIN Poseta P2 ON P.kor_ime=P2.kor_ime AND P.id_mesto!=P2.id_mesto AND P.datum=P2.datum JOIN Objekt O2 ON O2.id_mesto=P2.id_mesto JOIN Sosedi S ON (O.id_grad=S.grad1 AND O2.id_grad=S.grad2) OR (O.id_grad=S.grad2 AND O2.id_grad=S.grad1)
  20.  
  21. --4)Да се напише DML израз со кој ќе се вратат името и презимето на корисниците кои посетиле објекти кои се наоѓаат во соседни градови чие растојание е помало од 300 km.
  22.  
  23. SELECT DISTINCT ime,prezime
  24. FROM Korisnik K JOIN Poseta P ON K.kor_ime=P.kor_ime JOIN Poseta P2 ON K.kor_ime=P2.kor_ime AND P.id_mesto!=P2.id_mesto JOIN Objekt O ON P.id_mesto=O.id_mesto JOIN Objekt O2 ON O2.id_mesto=P2.id_mesto JOIN Sosedi S ON (S.grad1=O.id_grad AND S.grad2=O2.id_grad AND S.rastojanie<300) OR (S.grad2=O.id_grad AND S.grad1=O2.id_grad AND S.rastojanie<300)
  25.  
  26. --5)Да се напише DML израз со кој ќе се вратат имињата и презимињата на сите премиум корисници кои препорачале видео запис со времетраење подолго од 2 часа и за кој оставиле оцена поголема или еднаква на 4, подредени според датумот на регистрација во растечки редослед.
  27.  
  28. SELECT DISTINCT ime,prezime
  29. FROM Premium_korisnik PK JOIN Preporaka P ON PK.k_ime=P.k_ime_od JOIN Video_zapis VZ ON P.naslov=VZ.naslov JOIN Korisnik K ON PK.k_ime=K.k_ime
  30. WHERE ocena>=4 AND vremetraenje>120
  31. ORDER BY datum_reg
  32.  
  33. --6)Да се напише DML израз со кој ќе се вратат корисничките имиња и насловите на препорачаните видео записи за сите премиум корисници кои добиле препорака со оцена поголема од 3 за барем еден видео запис во 2021 година кој е дел од листата на желби во барем еден од нивните профили, подредени според корисничкото име.
  34.  
  35. SELECT DISTINCT PRO.k_ime,LZ.naslov
  36. FROM Premium_korisnik PK JOIN Preporaka P ON PK.k_ime=P.k_ime_na JOIN Profil PRO ON PK.k_ime=PRO.k_ime JOIN Lista_zelbi LZ ON PRO.k_ime=LZ.k_ime AND LZ.naslov=P.naslov
  37. WHERE ocena>3 AND P.datum LIKE '2021%'
  38.  
  39. --7)
  40.  
  41. --8)Да се напише DML израз со кој ќе се вратат сите парови на бендови (пар од имињата на бендовите) кои се основани во иста година.
  42.  
  43. SELECT b1.ime AS B1,b2.ime AS B2
  44. FROM Bend b1 JOIN Bend b2 ON b1.godina_osnovanje=b2.godina_osnovanje AND b1.id!=b2.id
  45. WHERE b1.ime>b2.ime
  46. --sveti zeleno kako Pelister
  47.  
  48.  
  49. --9)Да се напише DML израз со кој ќе се врати името на градот во кој се наоѓа објектот што бил посетен најголем број пати.
  50.  
  51. WITH Broj_poseti AS (SELECT P.id_mesto AS id_mesto, COUNT(*) AS broj_poseti
  52. FROM Poseta P JOIN Objekt O ON P.id_mesto=O.id_mesto
  53. GROUP BY P.id_mesto),
  54. --in a way so ova sledno se osiguram deka nema poveke objekti so ista posetenost
  55. Max_poseti AS (SELECT MAX(broj_poseti) AS max_poseti
  56. FROM Broj_poseti),
  57. Max_poseteni_objekti AS (SELECT BP.id_mesto AS id_mesto
  58. FROM Broj_poseti BP,Max_poseti MP
  59. WHERE BP.broj_poseti=MP.max_poseti)
  60. SELECT DISTINCT M.ime
  61. FROM Objekt O, Mesto M ON O.id_grad=M.id
  62. WHERE id_grad IN (SELECT id_grad
  63. FROM Max_poseteni_objekti MPO JOIN Objekt O ON MPO.id_mesto=O.id_mesto)
  64.  
  65. --10)Да се напише DML израз со кој ќе се вртат имињата на објектите кои се наоѓаат во градот што бил посетен најголем број пати. За посети на градови се сметаат посетите на места што претставуваат градови. Во ова не се вклучени посетите на објекти во тие градови.
  66.  
  67. --rizikuvam deka nema da ima poveke gradovi so ist broj na poseti, a i bi bilo glupavo vo resenieto da ima unija na objekti od dva istoposeteni gradovi imo
  68. WITH Poseteni_gradovi AS (SELECT M.ime AS ime_grad, O.id_grad, COUNT(*) AS broj_poseti
  69. FROM Poseta P JOIN Mesto M ON P.id_mesto=M.id JOIN Objekt O ON O.id_grad=M.id
  70. GROUP BY M.ime),
  71. Najposeten_grad AS (SELECT ime_grad, id_grad, MAX(broj_poseti) AS max_poseti
  72. FROM Poseteni_gradovi)
  73. SELECT M.ime
  74. FROM Mesto M JOIN Objekt O ON M.id=O.id_mesto JOIN Najposeten_grad NG ON NG.id_grad=O.id_grad
  75. ORDER BY M.ime DESC
  76.  
  77. --11)Да се напише DML израз со кој ќе се вратат корисничкото име и бројот на видео записи кои му биле препорачани на корисникот кој дал најголем број на препораки.
  78. Напомена: при оценување на оваа задача нема да се признаваат решенија со користење на ORDER BY.
  79.  
  80. WITH Koj_kolku_preporacuval AS (SELECT P.k_ime_od AS k_ime,COUNT(P.ID) AS broj_preporaki
  81. FROM Preporaka P JOIN Korisnik K ON P.k_ime_od=K.k_ime
  82. GROUP BY P.k_ime_od),
  83. Kolku_najmnogu_preporaki AS (SELECT MAX(broj_preporaki) AS max_preporaki
  84. FROM Koj_kolku_preporacuval),
  85. Koj_preporacal_najmnogu AS (SELECT k_ime
  86. FROM Koj_kolku_preporacuval KKP JOIN Kolku_najmnogu_preporaki KNP
  87. WHERE KKP.broj_preporaki=KNP.max_preporaki)
  88. SELECT KPN.k_ime, COUNT(ID) AS dobieni_preporaki
  89. FROM Preporaka P JOIN Koj_preporacal_najmnogu KPN ON P.k_ime_na=KPN.k_ime
  90. GROUP BY KPN.k_ime
  91.  
  92. --12)Да се напише DML израз со кој за секој корисник ќе се врати видео записот кој го препорачал најголем број пати.
  93.  
  94. WITH Preporaki_po_covek AS (SELECT P.k_ime_od AS k_ime, P.naslov, COUNT (P.ID) AS broj_preporaki
  95. FROM Preporaka P JOIN Korisnik K ON P.k_ime_od=K.k_ime
  96. GROUP BY k_ime, P.naslov),
  97. Max_preporaki_po_covek AS (SELECT k_ime, MAX(broj_preporaki) AS max_preporaki
  98. FROM Preporaki_po_covek PPC
  99. GROUP BY k_ime)
  100. SELECT DISTINCT P.k_ime_od AS k_ime,P.naslov,MPPC.max_preporaki AS broj
  101. FROM Preporaka P JOIN Max_preporaki_po_covek MPPC ON P.k_ime_od=MPPC.k_ime JOIN Preporaki_po_covek PPC ON P.k_ime_od=PPC.k_ime AND PPC.broj_preporaki=MPPC.max_preporaki AND P.naslov=PPC.naslov
  102.  
  103. --13)Да се напише DML израз со кој за секој фестивал ќе се врати името, цената на билетите, капацитетот на посетители, бројот на одржувања и вкупниот број на различни бендови кои настапиле.
  104.  
  105. SELECT F.ime,N.cena,N.kapacitet,COUNT(DISTINCT FO.datum_od) AS broj_odrzuvanja,COUNT(DISTINCT FB.id_bend) AS broj_bendovi
  106. FROM Nastan N JOIN Festival_odrzuvanje FO ON N.id=FO.id JOIN Festival F ON F.id=FO.id JOIN FestivaL_bend FB ON FB.id_festival=F.id
  107. GROUP BY F.ime
  108. ORDER BY kapacitet DESC
  109.  
  110. --14)Да се напише DML израз со кој за секој профил ќе се врати името на профилот и просечната оцена на видео записите во листата на желби асоцирана со тој профил. (Просечната оцена на секој видео запис се пресметува од сите оцени за тој видео запис).
  111.  
  112. WITH Avg_temp AS (SELECT P.ime,AVG(ocena) AS avg_ocena
  113. FROM Profil P JOIN Lista_zelbi LZ ON P.ime=LZ.ime JOIN Preporaka P ON P.naslov=LZ.naslov
  114. GROUP BY P.ime,LZ.naslov)
  115. SELECT ime,AVG(avg_ocena) AS po_profil
  116. FROM Avg_temp
  117. GROUP BY ime
  118.  
  119. --15)Да се напише DML израз со кој за секој корисник ќе се врати видео записот кој го препорачал најголем број пати.
  120.  
  121. SELECT DISTINCT ime,prezime
  122. FROM Vraboten V JOIN Shalterski_rabotnik SR ON V.ID=SR.ID JOIN Transakcija_shalter TS ON TS.ID_v=SR.ID JOIN Smetka S ON TS.MBR_k_s=S.MBR_k
  123. WHERE suma>1000 AND valuta='EUR' AND tip='isplata'
  124. ORDER BY ime
  125.  
  126. --16)Да се напише DML израз со кој ќе се вратат имињата и презимињата на на сите клиенти кои имаат направено трансакција за исплата на средства преку банкомат во износ поголем од 400 USD од сметка која работи со валута USD, подредени според името на клиентите.
  127.  
  128. SELECT ime,prezime
  129. FROM Klient K JOIN Smetka S ON K.MBR_k=S.MBR_k JOIN Transakcija_bankomat TB ON TB.broj=S.broj
  130. WHERE valuta='USD' AND suma>400
  131. ORDER BY ime
  132.  
  133. --17)Да се напише DML израз со кој ќе се вратат сите сметки кои работат со валута MKD од кои е направена барем една трансакција за исплата преку шалтер и барем една трансакција за исплата преку банкомат во 2021 година, подредени според бројот на сметка.
  134.  
  135. SELECT S.MBR_k,S.broj,S.valuta,S.saldo
  136. FROM Smetka S JOIN Transakcija_shalter TS ON S.broj=TS.broj
  137. WHERE datum LIKE '2021%' and valuta='MKD' AND tip='isplata'
  138. INTERSECT
  139. SELECT S.MBR_k,S.broj,S.valuta,S.saldo
  140. FROM Smetka S JOIN Transakcija_bankomat TB ON S.broj=TB.broj
  141. WHERE datum LIKE '2021%' and valuta='MKD'
  142.  
  143. --18)Да се напише DML израз со кој ќе се вратат сите клиенти кои направиле барем една трансакција преку банкомат (за сметки кои работат со валута EUR), но не направиле ниту една трансакција преку шалтер од истата сметка, подредени според името на клиентот.
  144.  
  145. SELECT K.*
  146. FROM Klient K JOIN Smetka S ON K.MBR_k=S.MBR_k JOIN Transakcija_bankomat TB ON TB.broj=S.broj
  147. WHERE valuta='EUR' and S.broj NOT IN (SELECT S.broj
  148. FROM Klient K JOIN Smetka S ON K.MBR_k=S.MBR_k JOIN Transakcija_shalter TS ON TS.broj=S.broj
  149. WHERE valuta='EUR')
  150. ORDER BY ime
  151.  
  152. --19)Да се напише DML израз со кој за секој шалтерски работник ќе се врати неговата шифра, датумот и бројот на трансакции за датумот на кој има направено најголем број на трансакции.
  153.  
  154. WITH Transakcii_po_datum AS (SELECT SR.ID,TS.datum, COUNT(TS.ID) AS broj_transakcii
  155. FROM Vraboten SR JOIN Transakcija_shalter TS ON SR.ID=TS.ID_v
  156. GROUP BY SR.ID,TS.datum),
  157. Max_transakcii_po_datum AS (SELECT ID, MAX(broj_transakcii) AS max_transakcii
  158. FROM Transakcii_po_datum
  159. GROUP BY ID)
  160. SELECT TPD.ID AS vraboten, datum, broj_transakcii
  161. FROM Transakcii_po_datum TPD JOIN Max_transakcii_po_datum MTPD ON TPD.broj_transakcii=MTPD.max_transakcii AND TPD.ID=MTPD.ID
  162.  
  163. --20)Да се напише DML израз со кој за секоја сметка која работи со валута EUR или USD да се вратат просечната направена сума oд трансакции за исплата преку шалтер во 2021 година и просечната направена сума од трансакции за исплата преку банкомат во 2021 година, подредени според бројот на сметка.
  164.  
  165. SELECT S.MBR_k,S.broj,AVG(TB.suma) AS prosechna_isplata_bankomat,AVG(TS.suma) AS prosechna_isplata_shalter
  166. FROM Smetka S JOIN Transakcija_shalter TS ON S.broj=TS.broj JOIN Transakcija_bankomat TB ON S.broj=TB.broj
  167. WHERE TS.datum LIKE '2021%' AND valuta IN ('USD','EUR') AND tip='isplata' AND TB.datum LIKE '2021%'
  168. GROUP BY S.MBR_k,S.broj
  169. ORDER BY S.broj
  170.  
  171. --21)Да се вратат имињата и презимињата на сите премиум корисници кои препорачале видео запис со времетраење подолго од 2 часа и за кој оставиле оцена поголема или еднаква на 4, подредени според датумот на регистрација во растечки редослед (времетраењето се чува во минути)
  172.  
  173. SELECT DISTINCT ime,prezime
  174. FROM Premium_korisnik PK JOIN Preporaka P ON P.k_ime_od=PK.k_ime JOIN Video_zapis VZ ON VZ.naslov=P.naslov JOIN Korisnik K ON PK.k_ime=K.k_ime
  175. WHERE ocena>=4 AND vremetraenje>120
  176. ORDER BY datum_reg
  177.  
  178. --22)Да се вратат корисничкото име и бројот на видео записи кои му биле препорачани на корисникот кој дал најголем број на препораки.
  179.  
  180. WITH Koj_preporacal AS (SELECT P.k_ime_od AS k_ime,COUNT(P.ID) AS broj_preporaki
  181. FROM Preporaka P JOIN Korisnik K ON K.k_ime=P.k_ime_od
  182. GROUP BY P.k_ime_od),
  183. Max_preporaki AS (SELECT MAX(broj_preporaki) AS max_preporaki
  184. FROM Koj_preporacal)
  185. SELECT P.k_ime_na AS k_ime,COUNT(P.ID) AS dobieni_preporaki
  186. FROM Preporaka P
  187. WHERE P.k_ime_na=(SELECT k_ime
  188. FROM Koj_preporacal KP JOIN Max_preporaki MP ON KP.broj_preporaki=MP.max_preporaki)
  189.  
  190. --23)За секој профил да се врати името на профилот и просечната оцена на видео записите во листата на желби асоцирана со тој профил. (Просечната оцена на секој видео запис се пресметува од сите оцени за тој видео запис).
  191.  
  192. WITH Avg_po_naslov AS (SELECT P.ime,AVG(PR.ocena) AS prosecna_ocena
  193. FROM Profil P JOIN Lista_zelbi LZ ON P.ime=LZ.ime JOIN Preporaka PR ON LZ.naslov=PR.naslov
  194. GROUP BY P.ime,PR.naslov
  195. ORDER BY P.ime)
  196. SELECT ime,AVG(prosecna_ocena) AS po_profil
  197. FROM Avg_po_naslov
  198. GROUP BY ime
  199.  
  200. --24)Да се вратат жанровите заедно со бројот на препораки со коментар што го содржи зборот „interesting“, подредени според бројот на препораки во опаѓачки ред.
  201.  
  202. SELECT VZZ.zanr, COUNT(P.komentar) AS broj_zanrovi
  203. FROM Video_zapis_zanr VZZ JOIN Preporaka P ON VZZ.naslov=P.naslov
  204. WHERE komentar LIKE '%interesting%'
  205. ORDER BY zanr DESC
  206.  
  207. --25)Да се врати список со насловите на видеата, времетраењето и бројот на препораки, за видеа кои се во листата на желби на најмалку два различни профили.
  208.  
  209. WITH Naslovi_2p AS (SELECT LZ.naslov AS naslov
  210. FROM Profil P JOIN Lista_zelbi LZ ON LZ.ime=P.ime
  211. GROUP BY LZ.naslov
  212. HAVING COUNT(P.ime)>1)
  213. SELECT N2P.naslov,vremetraenje,COUNT(P.ID) AS broj_preporaki
  214. FROM Naslovi_2p N2P LEFT OUTER JOIN Preporaka P ON N2P.naslov=P.naslov JOIN Video_zapis VZ ON VZ.naslov=N2P.naslov
  215. GROUP BY N2P.naslov
  216. ORDER BY N2P.naslov
  217.  
  218. --26)Да се вратат имињата на сите корисници кои имаат дадено препораки за видеа кои никој од нивните профили не ги има во листата на желби.
  219.  
  220. --se resavat samo so prvite dva reda ali ne mi svetese zeleno zaradi orderot posto tie prvo ja vklucuvaat verovatno Preporaka, a jas ispadna da ja vklucam posledno, i ako sakav da mi svetni zeleno morav da napravam nov join na Preporaka so mojot rezultat za da go dobijam toj redosled auf
  221. WITH Rezultat AS (SELECT DISTINCT P.k_ime AS k_ime_od
  222. FROM Profil P,Video_zapis VZ LEFT OUTER JOIN Lista_zelbi LZ ON P.k_ime=LZ.k_ime AND VZ.naslov=LZ.naslov JOIN Preporaka PR  ON P.k_ime=PR.k_ime_od AND VZ.naslov=PR.naslov AND LZ.naslov IS NULL)
  223. SELECT DISTINCT PR.k_ime_od
  224. FROM Preporaka PR JOIN Rezultat R ON PR.k_ime_od=R.k_ime_od
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement