Changes between Version 13 and Version 14 of QueryOptimization
- Timestamp:
- 06/16/26 19:43:53 (9 hours ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
QueryOptimization
v13 v14 12 12 {{{#!sql 13 13 CREATE OR REPLACE VIEW v_site_zapisnici AS 14 SELECT id_na_zapisnik, datum, vreme, lokacija, Potpis, 15 id_slucaj, EMBG_Prekrsuvach, Vozilo_Broj_Sasija, EMBG_Policaec 14 SELECT 15 id_na_zapisnik, 16 datum, 17 vreme, 18 lokacija, 19 Potpis, 20 id_slucaj, 21 EMBG_Prekrsuvach, 22 Vozilo_Broj_Sasija, 23 EMBG_Policaec 16 24 FROM Zapisnik; 17 25 }}} … … 23 31 {{{#!sql 24 32 CREATE OR REPLACE VIEW v_zapisnici_detalno AS 25 SELECT z.id_na_zapisnik, z.datum, z.vreme, z.lokacija, z.id_slucaj, 26 g.EMBG AS embg_prekrsitel, g.ime AS prekrsitel_ime, g.prezime AS prekrsitel_prezime, 27 v.broj_na_sasija, v.model AS vozilo_model, 28 pol.EMBG_P AS embg_policaec, g_p.ime AS policaec_ime, g_p.prezime AS policaec_prezime, 29 p.ime AS prekrsok, k.iznos_kazna, u.iznos AS iznos_uplata, u.status AS status_uplata 33 SELECT 34 z.id_na_zapisnik, 35 z.datum, 36 z.vreme, 37 z.lokacija, 38 z.id_slucaj, 39 g.EMBG AS embg_prekrsitel, 40 g.ime AS prekrsitel_ime, 41 g.prezime AS prekrsitel_prezime, 42 v.broj_na_sasija, 43 v.model AS vozilo_model, 44 pol.EMBG_P AS embg_policaec, 45 g_p.ime AS policaec_ime, 46 g_p.prezime AS policaec_prezime, 47 p.ime AS prekrsok, 48 k.iznos_kazna, 49 u.iznos AS iznos_uplata, 50 u.status AS status_uplata 30 51 FROM Zapisnik z 31 LEFT JOIN Gragjanin g ON z.EMBG_Prekrsuvach = g.EMBG32 LEFT JOIN Vozilo v ON z.Vozilo_Broj_Sasija = v.broj_na_sasija33 LEFT JOIN Policaec pol ON z.EMBG_Policaec = pol.EMBG_P34 LEFT JOIN Gragjanin g_p ON pol.EMBG_P = g_p.EMBG52 LEFT JOIN Gragjanin g ON z.EMBG_Prekrsuvach = g.EMBG 53 LEFT JOIN Vozilo v ON z.Vozilo_Broj_Sasija = v.broj_na_sasija 54 LEFT JOIN Policaec pol ON z.EMBG_Policaec = pol.EMBG_P 55 LEFT JOIN Gragjanin g_p ON pol.EMBG_P = g_p.EMBG 35 56 LEFT JOIN Stavka_Zapisnik sz ON z.id_na_zapisnik = sz.id_na_zapisnik 36 LEFT JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok37 LEFT JOIN Kazna k ON p.id_kazna = k.id_kazna38 LEFT JOIN Uplata u ON z.id_na_zapisnik = u.id_zapisnik;57 LEFT JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok 58 LEFT JOIN Kazna k ON p.id_kazna = k.id_kazna 59 LEFT JOIN Uplata u ON z.id_na_zapisnik = u.id_zapisnik; 39 60 }}} 40 61 … … 45 66 {{{#!sql 46 67 CREATE OR REPLACE VIEW v_neplateni_kazni AS 47 SELECT z.id_na_zapisnik, z.datum AS datum_prekrsok, z.lokacija, 48 g.EMBG AS embg_prekrsitel, g.ime AS ime_prekrsitel, g.prezime AS prezime_prekrsitel, 49 p.ime AS prekrsok, k.iznos_kazna, u.iznos AS iznos_za_naplata, 50 (CURRENT_DATE - z.datum) AS denovi_neplateno 68 SELECT 69 z.id_na_zapisnik, 70 z.datum AS datum_prekrsok, 71 z.lokacija, 72 g.EMBG AS embg_prekrsitel, 73 g.ime AS ime_prekrsitel, 74 g.prezime AS prezime_prekrsitel, 75 p.ime AS prekrsok, 76 k.iznos_kazna, 77 u.iznos AS iznos_za_naplata, 78 (CURRENT_DATE - z.datum) AS denovi_neplateno 51 79 FROM Uplata u 52 JOIN Zapisnik z ON u.id_zapisnik = z.id_na_zapisnik53 JOIN Gragjanin g ON z.EMBG_Prekrsuvach = g.EMBG80 JOIN Zapisnik z ON u.id_zapisnik = z.id_na_zapisnik 81 JOIN Gragjanin g ON z.EMBG_Prekrsuvach = g.EMBG 54 82 JOIN Stavka_Zapisnik sz ON z.id_na_zapisnik = sz.id_na_zapisnik 55 JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok56 JOIN Kazna k ON p.id_kazna = k.id_kazna83 JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok 84 JOIN Kazna k ON p.id_kazna = k.id_kazna 57 85 WHERE u.status = 'Neplateno'; 58 86 }}} … … 66 94 WITH Prekrsoci_Stats AS ( 67 95 SELECT z.EMBG_Prekrsuvach, sz.id_na_prekrsok, 68 COUNT() AS broj_povtori, MIN(z.datum) AS prv_pat, MAX(z.datum) AS posleden_pat, 69 SUM(k.iznos_kazna) AS vkupen_iznos_kazni 96 COUNT(*) AS broj_povtori, MIN(z.datum) AS prv_pat, 97 MAX(z.datum) AS posleden_pat, 98 SUM(k.iznos_kazna) AS vkupen_iznos_kazni 70 99 FROM Zapisnik z 71 100 JOIN Stavka_Zapisnik sz ON z.id_na_zapisnik = sz.id_na_zapisnik 72 JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok73 JOIN Kazna k ON p.id_kazna = k.id_kazna101 JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok 102 JOIN Kazna k ON p.id_kazna = k.id_kazna 74 103 GROUP BY z.EMBG_Prekrsuvach, sz.id_na_prekrsok 75 HAVING COUNT( ) > 1104 HAVING COUNT(*) > 1 76 105 ) 77 106 SELECT g.EMBG, g.ime, g.prezime, p.id_prekrsok, p.ime AS prekrsok, 78 ps.broj_povtori, ps.prv_pat, ps.posleden_pat, ps.vkupen_iznos_kazni107 ps.broj_povtori, ps.prv_pat, ps.posleden_pat, ps.vkupen_iznos_kazni 79 108 FROM Prekrsoci_Stats ps 80 109 JOIN Gragjanin g ON ps.EMBG_Prekrsuvach = g.EMBG 81 JOIN Prekrsok p ON ps.id_na_prekrsok = p.id_prekrsok;82 }}} 83 84 === Поглед 5: v_polica ici_prosek_zapisnici_mv ===110 JOIN Prekrsok p ON ps.id_na_prekrsok = p.id_prekrsok; 111 }}} 112 113 === Поглед 5: v_policajci_prosek_zapisnici_mv === 85 114 '''Статистики по полицаец: вкупно записници, прв/последен, активни месеци и просечен број записници по месец.'''[[BR]] 86 115 Погледот овозможува евалуација на ефикасноста и активноста на полициските службеници на терен низ подолг временски период. Наменет е за внатрешна контрола и менаџмент на полициските станици за следење на просечната продуктивност по месец. Се потпира на статистичка агрегација над табелата `Zapisnik`, која потоа се спојува со табелите `Policaec` и `Gragjanin` за комплетирање на профилот.[[BR]] 87 116 Се пребарува по: `EMBG_P`. 88 117 {{{#!sql 89 CREATE MATERIALIZED VIEW v_polica ici_prosek_zapisnici_mv AS118 CREATE MATERIALIZED VIEW v_policajci_prosek_zapisnici_mv AS 90 119 WITH Policaec_Stats AS ( 91 SELECT EMBG_Policaec, COUNT(id_na_zapisnik) AS vkupno_zapisnici,92 MIN(datum) AS prv_zapisnik, MAX(datum) AS posleden_zapisnik93 FROM Zapisnik94 GROUP BY EMBG_Policaec120 SELECT EMBG_Policaec, COUNT(id_na_zapisnik) AS vkupno_zapisnici, 121 MIN(datum) AS prv_zapisnik, MAX(datum) AS posleden_zapisnik 122 FROM Zapisnik 123 GROUP BY EMBG_Policaec 95 124 ) 96 125 SELECT pol.EMBG_P, pol.broj_na_znacka, g.ime AS policaec_ime, g.prezime AS policaec_prezime, 97 ps.vkupno_zapisnici, ps.prv_zapisnik, ps.posleden_zapisnik, 98 GREATEST(DATE_PART('year', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)) * 12 + 99 DATE_PART('month', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)), 1) AS aktivni_meseci, 100 ROUND(ps.vkupno_zapisnici::numeric / 101 GREATEST(DATE_PART('year', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)) * 12 + 102 DATE_PART('month', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)), 1)::numeric, 2) AS prosek_zapisnici_po_mesec 126 ps.vkupno_zapisnici, ps.prv_zapisnik, ps.posleden_zapisnik, 127 GREATEST(DATE_PART('year', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)) * 12 + 128 DATE_PART('month', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)), 1) AS aktivni_meseci, 129 (ps.vkupno_zapisnici::numeric / 130 GREATEST(DATE_PART('year', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)) * 12 + 131 DATE_PART('month', AGE(ps.posleden_zapisnik, ps.prv_zapisnik)), 132 1)::numeric) AS prosek_zapisnici_po_mesec 103 133 FROM Policaec_Stats ps 104 134 JOIN Policaec pol ON ps.EMBG_Policaec = pol.EMBG_P
