1cutcut1

bazi-dml

Feb 1st, 2025
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.19 KB | None | 0 0
  1. 1)
  2. select distinct l.id
  3. from Lice as l
  4. inner join Test as t on l.id=t.id
  5. inner join Vakcinacija_datum as v on l.id=v.id_lice
  6. where t.rezultat='pozitiven' and t.datum < v.datum
  7. order by l.id ASC;
  8. 2)
  9. select distinct m.ime,m.prezime
  10. from Muzicar as m
  11. inner join Muzicar_instrument as mi on m.id=mi.id_muzicar
  12. inner join Koncert_muzicar_bend as kmb on m.id=kmb.id_muzicar
  13. inner join Muzicar_bend as mb on m.id=mb.id_muzicar
  14. inner join Bend as b on mb.id_bend=b.id
  15. inner join Koncert as k on kmb.id_koncert=k.id
  16. where mi.instrument='gitara' and mb.datum_napustanje<k.datum
  17. order by m.ime
  18. 3)
  19. select k.ime,k.prezime
  20. from Korisnik as k
  21. --посета на еден објект
  22. inner join Poseta as p1 on k.kor_ime=p1.kor_ime
  23. inner join Objekt as o1 on p1.id_mesto=o1.id_mesto
  24. --посета на втор објект
  25. inner join Poseta as p2 on k.kor_ime=p2.kor_ime
  26. inner join Objekt as o2 on p2.id_mesto=o2.id_mesto
  27. inner join Sosedi as s on s.grad1=o1.id_grad and s.grad2=o2.id_grad
  28. where p1.datum=p2.datum
  29.  
  30.  
  31. 4)
  32. select distinct k.ime,k.prezime
  33. from Korisnik as k
  34. --посета на еден објект
  35. inner join Poseta as p1 on k.kor_ime=p1.kor_ime
  36. inner join Objekt as o1 on p1.id_mesto=o1.id_mesto
  37. --посета на втор објект
  38. inner join Poseta as p2 on k.kor_ime=p2.kor_ime
  39. inner join Objekt as o2 on p2.id_mesto=o2.id_mesto
  40. inner join Sosedi as s on s.grad1=o1.id_grad and s.grad2=o2.id_grad
  41. where s.rastojanie < 300
  42.  
  43.  
  44. 5)
  45. select distinct ime,k.prezime
  46. from Premium_korisnik as pk
  47. inner join Korisnik as k on pk.k_ime=k.k_ime
  48. inner join Preporaka as p on k.k_ime=p.k_ime_od
  49. inner join Video_zapis as v on p.naslov=v.naslov
  50. where v.vremetraenje>120 and p.ocena>=4
  51. order by k.datum_reg ASC;
  52.  
  53.  
  54. 6)
  55. --прво cte е за "корисничките имиња и насловите на препорачаните видео записи за сите
  56. --премиум корисници кои добиле препорака со оцена поголема од 3 за барем еден видео запис во 2021 годин"
  57. with cte as(
  58. select *
  59. from Premium_korisnik as pk
  60. inner join Korisnik as k on pk.k_ime=k.k_ime
  61. inner join Preporaka as p on k.k_ime=p.k_ime_na
  62. inner join Video_zapis as v on p.naslov=v.naslov
  63. where p.ocena>3 and p.datum LIKE '2021%'
  64. ),cte2 as(
  65. select *
  66. from Premium_korisnik as pk
  67. inner join Korisnik as k on pk.k_ime=k.k_ime
  68. inner join Profil as p on k.k_ime=p.k_ime
  69. inner join Lista_zelbi as lz on p.k_ime=lz.k_ime
  70. )
  71. select distinct cte.k_ime,cte.naslov
  72. from cte inner join cte2 on cte.k_ime=cte2.k_ime and cte.naslov=cte2.naslov
  73.  
  74. 7)
  75.  
  76. 8)
  77. from Bend as b1
  78. inner join Bend as b2 on b1.godina_osnovanje=b2.godina_osnovanje
  79. where b1.id!=b2.id and b1.ime>b2.ime
  80.  
  81. --id-to да им е различно за да не го спојам истот бенд со истот
  82. -- вториот услов е како distinct само што името овде според примерот треба буквата од името
  83. -- на првиот бенд да биде со поголем asc code од буквата на втриот
  84. --пр B има поголем asc code од A
  85. 9)
  86. --во првото cte наоѓаме секој град колку знаменитости има
  87. with cte as (
  88. select m.ime, count(*) as broj
  89. from Mesto as m
  90. inner join Grad as g on m.id=g.id_mesto
  91. inner join Objekt as o on g.id_mesto=o.id_grad
  92. group by m.ime
  93. ),-- во второто cte наоѓаме градот со со најмногу објекти
  94. cte2 as (
  95. select max(broj) as max
  96. from cte
  97. )
  98.  
  99.  
  100. select cte.ime
  101. from cte2 inner join cte on cte2.max=cte.broj
  102.  
  103. 10)
  104. -- with gradovi_poseti as (
  105. -- select p.id_mesto, count(*) as broj_poseti
  106. -- from poseta p
  107. -- join mesto m on p.id_mesto = m.id
  108. -- join grad g on m.id = g.id_mesto
  109. -- group by p.id_mesto
  110. -- ),
  111. -- najposeten_grad as (
  112. -- select id_mesto
  113. -- from gradovi_poseti
  114. -- where broj_poseti = (select max(broj_poseti)
  115. -- from gradovi_poseti)
  116. -- )
  117. -- select m.ime
  118. -- from mesto m
  119. -- where m.id in (
  120. -- select o.id_mesto
  121. -- from
  122. -- objekt o
  123. -- join
  124. -- najposeten_grad np on o.id_grad = np.id_mesto
  125. -- );
  126. --нз
  127. 11)
  128. --korisnicite koi dale najmnogu prekoraki
  129. with cte as(
  130. select k.k_ime, count(*) as broj
  131. from Korisnik as k
  132. inner join Preporaka as p on k.k_ime=p.k_ime_od
  133. group by k.k_ime
  134. )
  135. select cte.k_ime, count(*) as dobieni_preporaki
  136. from cte inner join Preporaka as p on cte.k_ime=p.k_ime_na
  137. where broj = (
  138. select max(broj)
  139. from cte
  140. )
  141. group by cte.k_ime
  142.  
  143. 12)
  144.  
  145. --наоѓање на секој корисник бројот на препораки
  146. with cte as (
  147. select k.k_ime, v.naslov, count(*) as broj
  148. from Korisnik as k
  149. inner join Preporaka as p on k.k_ime=p.k_ime_od
  150. inner join Video_zapis as v on p.naslov=v.naslov
  151. group by k.k_ime, v.naslov
  152. ),cte2 as (
  153. select cte.k_ime, max(broj) as max_broj
  154. from cte
  155. group by cte.k_ime
  156. )
  157.  
  158. select cte.k_ime, cte.naslov, cte.broj
  159. from cte inner join cte2 on cte.k_ime=cte2.k_ime and cte.broj=cte2.max_broj
  160. --табелите ги спојувам според кориничкот име и бројот на преопораки со нивниот максимален број на препораки
  161.  
  162. 13)
  163. with cte_broj_odrzuvanja as (
  164. select f.id as id_festival, count(*) as broj_odrzuvanja
  165. from festival f
  166. inner join festival_odrzuvanje fo on f.id = fo.id
  167. group by f.id
  168. ),
  169. cte_broj_bendovi as (
  170. select fb.id_festival,count(distinct fb.id_bend) as broj_bendovi
  171. from festival_bend fb
  172. group by fb.id_festival
  173. )
  174. select
  175. f.ime ,
  176. n.cena,
  177. n.kapacitet,
  178. cte_broj_odrzuvanja.broj_odrzuvanja,
  179. cte_broj_bendovi.broj_bendovi
  180. from festival f
  181. inner join nastan n on f.id = n.id
  182. inner join cte_broj_odrzuvanja on f.id = cte_broj_odrzuvanja.id_festival
  183. inner join cte_broj_bendovi on f.id = cte_broj_bendovi.id_festival
  184. 14)
  185. --ИСТА Е КО 26 ТАТА
  186.  
  187.  
  188. --Od sekoj video zapis zemem globalno prosecna ocena
  189. with videoprosek as (
  190. select v.naslov, avg(p.ocena) as prosechna_ocenka
  191. from video_zapis as v
  192. inner join preporaka as p on v.naslov = p.naslov
  193. group by v.naslov
  194. )
  195. --utkata mene u gornoto mi beshe shto ne znev kako da go zemame prosekot
  196. -- a ustvar trebalo da spojam profilot so negovoata lista na zhelba kade se naogjaat naslovotie za koi prethodno najdovme prosecna ocena
  197. select p.ime, avg(vp.prosechna_ocenka) as po_profil
  198. from profil as p
  199. inner join lista_zelbi as l on p.k_ime = l.k_ime and p.ime = l.ime
  200. inner join videoprosek as vp on l.naslov = vp.naslov
  201. group by p.ime;
  202. 15)
  203. select v.ime,v.prezime
  204. from Vraboten as v
  205. inner join Shalterski_rabotnik as sk on v.ID=sk.ID
  206. inner join Transakcija_shalter as ts on sk.ID=ts.ID_v
  207. inner join Smetka as s on ts.broj=s.broj
  208. where tip='isplata' and suma>1000 and valuta='EUR'
  209. order by v.ime ASC
  210. 16)
  211. select k.ime,k.prezime
  212. from Klient as k
  213. inner join Smetka as s on k.MBR_k=s.MBR_k
  214. inner join Transakcija_bankomat as tb on s.broj=tb.broj and s.MBR_k=tb.MBR_k_s
  215. where suma>400 and valuta='USD'
  216. order by k.ime ASC
  217. 17)
  218. select s.*
  219. from Smetka s join Transakcija_bankomat tb on s.MBR_k=tb.MBR_k_s
  220. join Transakcija_shalter ts on s.MBR_k=ts.MBR_k_s
  221. where s.valuta='MKD' and
  222. ts.tip='isplata' and
  223. ts.datum like '2021-%-%'
  224. and tb.datum like '2021-%-%'
  225. order by mbr_k, broj
  226. 18)
  227. -- --сите клиенти кои направиле барем една трансакција преку банкомат (за сметки кои работат со валута EUR),
  228. with cte as (
  229. select k.MBR_k
  230. from Klient as k
  231. inner join Smetka as s on k.MBR_k=s.MBR_k
  232. inner join Transakcija_bankomat as tb on s.MBR_k=tb.MBR_k_s
  233. where valuta='EUR'
  234.  
  235. EXCEPT
  236. select k.MBR_k
  237. from Klient as k
  238. inner join Transakcija_shalter as ts on k.MBR_k=ts.MBR_k
  239. inner join Smetka as s on ts.broj=s.broj
  240. where valuta='EUR'
  241. )
  242. --Во горинте нема потреба од правење на ПОДРЕДУВАЊА
  243.  
  244. select k.MBR_k,k.ime,k.prezime,k.adresa,k.datum
  245. from cte inner join Klient as k on cte.MBR_k=k.MBR_k
  246. -- подредени според името на клиентот
  247. order by k.ime
  248. 19)
  249. -- ЗАБЕЛЕШКА МЕСТО ШАЛТЕРСКИ ВРАБОТЕН ОДИ СО ВРАБОТЕН ТАКА РАБОТИ
  250. with cte as(
  251. select v.ID as vraboten, t.datum, count(*) as broj_transakcii
  252. from Vraboten as v
  253. inner join Transakcija_shalter as t on v.ID=t.ID_v
  254. group by v.ID, t.datum
  255. ),
  256. cte2 as (
  257. select vraboten,max(broj_transakcii) as max
  258. from cte
  259. group by vraboten
  260. )
  261.  
  262. select cte.vraboten,cte.datum, broj_transakcii
  263. from cte2 inner join cte on cte2.vraboten=cte.vraboten and cte2.max=cte.broj_transakcii
  264.  
  265.  
  266.  
  267. 20)
  268. with cteShalter as (
  269. select s.MBR_k,s.broj, avg(suma) as prosechna_isplata_shalter
  270. from Smetka as s
  271. inner join Transakcija_shalter as t on s.broj=t.broj
  272. group by s.MBR_k,s.broj
  273. having (valuta='EUR' or valuta='USD') and datum LIKE '2021%' and tip='isplata'
  274. ),
  275. cteBankomat as(
  276. select s.MBR_k,s.broj, avg(suma) as prosechna_isplata_bankomat
  277. from Smetka as s
  278. inner join Transakcija_bankomat as b on s.broj=b.broj
  279. group by s.MBR_k, s.broj
  280. having (valuta='EUR' or valuta='USD') and datum LIKE '2021%'
  281. )
  282. select cb.MBR_k,cb.broj,prosechna_isplata_bankomat,prosechna_isplata_shalter
  283. from cteBankomat as cb inner join cteShalter as cs on cb.MBR_k=cs.MBR_k and cb.broj=cs.broj
  284. 21)
  285. select distinct k.ime,k.prezime
  286. from Premium_korisnik as pk
  287. inner join Korisnik as k on pk.k_ime=k.k_ime
  288. inner join Preporaka as p on k.k_ime=p.k_ime_od
  289. inner join Video_zapis as v on p.naslov=v.naslov
  290. where vremetraenje>120 and ocena>=4
  291. order by datum_reg ASC;
  292. 22)
  293. -- го бараме прво корисникот кој дал најголем број на препораки
  294. with KosinikPrep as (
  295. select k.k_ime,count(*) as brojPreporakiDal
  296. from Korisnik as k
  297. inner join Preporaka as p on k.k_ime=p.k_ime_od
  298. group by k.k_ime
  299. ),
  300. --prep OD dal , Na primil
  301. KorisnikNajmnPrep as(
  302. select *
  303. from KosinikPrep
  304. where brojPreporakiDal=(select max(brojPreporakiDal)
  305. from KosinikPrep)
  306. )
  307.  
  308. select kn.k_ime, count(*) as dobieni_preporaki
  309. from KorisnikNajmnPrep as kn
  310. inner join Preporaka as p on kn.k_ime=k_ime_na
  311. group by kn.k_ime
  312. 23)
  313. --Od sekoj video zapis zemem globalno prosecna ocena
  314. with videoprosek as (
  315. select v.naslov, avg(p.ocena) as prosechna_ocenka
  316. from video_zapis as v
  317. inner join preporaka as p on v.naslov = p.naslov
  318. group by v.naslov
  319. )
  320. -- treba da spojam profilot so negovoata lista na zhelba kade se naogjaat naslovotie za koi prethodno najdovme prosecna ocena
  321. select p.ime, avg(vp.prosechna_ocenka) as po_profil
  322. from profil as p
  323. inner join lista_zelbi as l on p.k_ime = l.k_ime and p.ime = l.ime
  324. inner join videoprosek as vp on l.naslov = vp.naslov
  325. group by p.ime;
  326.  
  327. 24)
  328. select vzz.zanr, count(*) as broj_zanrovi
  329. from Video_zapis_zanr as vzz
  330. inner join Video_zapis as v on vzz.naslov=v.naslov
  331. inner join Preporaka as p on p.naslov=v.naslov
  332. where komentar LIKE '%interesting%'
  333. group by vzz.zanr
  334. order by broj_zanrovi DESC
  335.  
  336. 25)
  337. with cte as (
  338. select v.naslov, count(*) as brojPojavuvanja
  339. from Video_zapis as v
  340. inner join Lista_zelbi as lz on v.naslov = lz.naslov
  341. inner join Profil as p on p.ime = lz.ime and p.k_ime = lz.k_ime
  342. group by v.naslov
  343. ), cte2 as (
  344. select *
  345. from cte
  346. where cte.brojPojavuvanja >= 2
  347. )
  348.  
  349. select v.naslov, v.vremetraenje, count(p.naslov) as broj_preporaki
  350. from cte2 as c
  351. inner join Video_zapis as v on c.naslov = v.naslov
  352. left join Preporaka as p on v.naslov = p.naslov
  353. group by v.naslov, v.vremetraenje
  354. order by v.naslov;
  355.  
  356. 26)
  357.  
Advertisement
Add Comment
Please, Sign In to add comment