Changes between Version 13 and Version 14 of QueryOptimization


Ignore:
Timestamp:
06/16/26 19:43:53 (9 hours ago)
Author:
231069
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v13 v14  
    1212{{{#!sql
    1313CREATE 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
     14SELECT
     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
    1624FROM Zapisnik;
    1725}}}
     
    2331{{{#!sql
    2432CREATE 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
     33SELECT
     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
    3051FROM Zapisnik z
    31 LEFT JOIN Gragjanin g        ON z.EMBG_Prekrsuvach = g.EMBG
    32 LEFT JOIN Vozilo v           ON z.Vozilo_Broj_Sasija = v.broj_na_sasija
    33 LEFT JOIN Policaec pol       ON z.EMBG_Policaec = pol.EMBG_P
    34 LEFT JOIN Gragjanin g_p      ON pol.EMBG_P = g_p.EMBG
     52LEFT JOIN Gragjanin g ON z.EMBG_Prekrsuvach = g.EMBG
     53LEFT JOIN Vozilo v ON z.Vozilo_Broj_Sasija = v.broj_na_sasija
     54LEFT JOIN Policaec pol ON z.EMBG_Policaec = pol.EMBG_P
     55LEFT JOIN Gragjanin g_p ON pol.EMBG_P = g_p.EMBG
    3556LEFT 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_prekrsok
    37 LEFT JOIN Kazna k            ON p.id_kazna = k.id_kazna
    38 LEFT JOIN Uplata u           ON z.id_na_zapisnik = u.id_zapisnik;
     57LEFT JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok
     58LEFT JOIN Kazna k ON p.id_kazna = k.id_kazna
     59LEFT JOIN Uplata u ON z.id_na_zapisnik = u.id_zapisnik;
    3960}}}
    4061
     
    4566{{{#!sql
    4667CREATE 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
     68SELECT
     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
    5179FROM Uplata u
    52 JOIN Zapisnik z         ON u.id_zapisnik = z.id_na_zapisnik
    53 JOIN Gragjanin g        ON z.EMBG_Prekrsuvach = g.EMBG
     80JOIN Zapisnik z ON u.id_zapisnik = z.id_na_zapisnik
     81JOIN Gragjanin g ON z.EMBG_Prekrsuvach = g.EMBG
    5482JOIN Stavka_Zapisnik sz ON z.id_na_zapisnik = sz.id_na_zapisnik
    55 JOIN Prekrsok p         ON sz.id_na_prekrsok = p.id_prekrsok
    56 JOIN Kazna k            ON p.id_kazna = k.id_kazna
     83JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok
     84JOIN Kazna k ON p.id_kazna = k.id_kazna
    5785WHERE u.status = 'Neplateno';
    5886}}}
     
    6694WITH Prekrsoci_Stats AS (
    6795SELECT 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
    7099FROM Zapisnik z
    71100JOIN Stavka_Zapisnik sz ON z.id_na_zapisnik = sz.id_na_zapisnik
    72 JOIN Prekrsok p         ON sz.id_na_prekrsok = p.id_prekrsok
    73 JOIN Kazna k            ON p.id_kazna = k.id_kazna
     101JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok
     102JOIN Kazna k ON p.id_kazna = k.id_kazna
    74103GROUP BY z.EMBG_Prekrsuvach, sz.id_na_prekrsok
    75 HAVING COUNT() > 1
     104HAVING COUNT(*) > 1
    76105)
    77106SELECT 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_kazni
     107       ps.broj_povtori, ps.prv_pat, ps.posleden_pat, ps.vkupen_iznos_kazni
    79108FROM Prekrsoci_Stats ps
    80109JOIN 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_policaici_prosek_zapisnici_mv ===
     110JOIN Prekrsok p ON ps.id_na_prekrsok = p.id_prekrsok;
     111}}}
     112
     113=== Поглед 5: v_policajci_prosek_zapisnici_mv ===
    85114'''Статистики по полицаец: вкупно записници, прв/последен, активни месеци и просечен број записници по месец.'''[[BR]]
    86115Погледот овозможува евалуација на ефикасноста и активноста на полициските службеници на терен низ подолг временски период. Наменет е за внатрешна контрола и менаџмент на полициските станици за следење на просечната продуктивност по месец. Се потпира на статистичка агрегација над табелата `Zapisnik`, која потоа се спојува со табелите `Policaec` и `Gragjanin` за комплетирање на профилот.[[BR]]
    87116Се пребарува по: `EMBG_P`.
    88117{{{#!sql
    89 CREATE MATERIALIZED VIEW v_policaici_prosek_zapisnici_mv AS
     118CREATE MATERIALIZED VIEW v_policajci_prosek_zapisnici_mv AS
    90119WITH Policaec_Stats AS (
    91 SELECT EMBG_Policaec, COUNT(id_na_zapisnik) AS vkupno_zapisnici,
    92 MIN(datum) AS prv_zapisnik, MAX(datum) AS posleden_zapisnik
    93 FROM Zapisnik
    94 GROUP BY EMBG_Policaec
     120    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
    95124)
    96125SELECT 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
    103133FROM Policaec_Stats ps
    104134JOIN Policaec pol ON ps.EMBG_Policaec = pol.EMBG_P