wiki:AdvancedReports

Напредни извештаи од базата (SQL)

Целосни резултати по избирачко место за реализации со кандидатура

CREATE EXTENSION IF NOT EXISTS tablefunc;

DO
$$
    DECLARE
        dynamic_sql        text;
        column_definitions text;
    BEGIN

        column_definitions := (SELECT string_agg(quote_ident(att) || ' bigint', ', ')
                               FROM (SELECT DISTINCT g.g_ime att
                                     FROM kandidaturi kan
                                              join kandidati k on kan.g_id = k.g_id
                                              join gragjani g on g.g_id = k.g_id) AS t);

        RAISE NOTICE 'Result: %', column_definitions;

        dynamic_sql := format(
                'drop view if exists rezultati_kandidati; ' ||
                'create view rezultati_kandidati as ' ||
                'SELECT * FROM crosstab(''select im.im_mesto, g.g_ime attribute, ' ||
                '(select count(gla.ug_id) from glasanja gla join glasovi_za_kandidat glk on gla.ug_id = glk.ug_id where kan_id = kan.kan_id and gla.im_id = im.im_id) value from izbiracki_mesta im cross join kandidaturi kan join kandidati k on kan.g_id = k.g_id join gragjani g on k.g_id = g.g_id order by 1,2'') AS ct(row_name varchar, %s);',
                column_definitions
                       );

        RAISE NOTICE 'Result: %', dynamic_sql;
        EXECUTE dynamic_sql;

    END
$$;

select *
from rezultati_kandidati

Целосни резултати по избирачко место за реализации со кандидатска листа

CREATE EXTENSION IF NOT EXISTS tablefunc;

DO
$$
    DECLARE
        dynamic_sql        text;
        column_definitions text;
    BEGIN

        column_definitions := (SELECT string_agg(quote_ident(att) || ' bigint', ', ')
                               FROM (SELECT DISTINCT p.p_ime att
                                     FROM kandidatski_listi kan
                                      join partii p on kan.p_id = p.p_id) AS t);

        RAISE NOTICE 'Result: %', column_definitions;

        dynamic_sql := format(
                        'drop view if exists rezultati_partii;
                        create view rezultati_partii as
                        select * from crosstab(''select im.im_mesto, p.p_ime, (select count(gla.ug_id) from glasanja gla join glasovi_za_lista glk on gla.ug_id = glk.ug_id join kandidatski_listi kl on kl.kl_id = glk.kl_id where kl.p_id = p.p_id and gla.im_id = im.im_id) from izbiracki_mesta im cross join partii p order by 1, 2'')  AS ct(row_name varchar, %s);
', column_definitions
                       );

        RAISE NOTICE 'Result: %', dynamic_sql;
        EXECUTE dynamic_sql;

    END
$$;

select *
from rezultati_partii

Податоци за излезноста на граѓани по избирачко место по даден интервал X од час Y до час Z, за дадена реализација Q

with broj_glasaci_po_mesto as (
    select im.im_id, count(distinct g.g_id) broj_glasaci
    from izbiracki_mesta im
    join adresi a on im.im_id = a.im_id
    join gragjani g on a.a_id = g.a_id
    group by im.im_id
)

select interval_cas, im.im_id, im.im_mesto,
       coalesce((select broj_glasaci from broj_glasaci_po_mesto where im_id = im.im_id), 0) vkupno_registrirani,
       count(distinct gl.ug_id) vkupno_izlezeni,
       coalesce(count(distinct gl.ug_id) * 100.0 / (select broj_glasaci from broj_glasaci_po_mesto where im_id = im.im_id), 0) procentualna_izleznost
from generate_series(Y, Z, Q) interval_cas
cross join izbiracki_mesta im
left join glasanja gl on im.im_id = gl.im_id and gl.ri_id = X and make_time(extract(hour from ug_vreme)::int, extract(min from ug_vreme)::int, 0)  between make_time(interval_cas::int, 0, 0) and make_time((interval_cas::int + (Q - 1)) % 24, 59, 0)
left join glasovi_za_kandidat gzk on gl.ug_id = gzk.ug_id
group by im.im_id, im.im_mesto, interval_cas
order by im.im_id, im.im_mesto asc

Листање на членовите на комисиите во избирачките места за реализација на избори X каде бројот на приговори е поголем од Y

with izleznost_count as (select im.im_id,
                                im.im_mesto     izbiracko_mesto,
                                count(pr.pr_id) broj_prigovori
                         from izbiracki_mesta im
                         left join prigovori pr on im.im_id = pr.im_id
                         where pr.ri_id = X
                         group by im.im_id, im.im_mesto)
select g.g_ime,
       g.g_prezime,
       k.kom_id,
       scn.kom_id,
       k.ri_id,
       im.im_mesto,
       (select broj_prigovori from izleznost_count where im_id = im.im_id) broj_progovori
from clenovi_na_komisija ck
         join se_clenovi_na scn on scn.g_id = ck.g_id
         join komisii k on scn.kom_id = k.kom_id and k.ri_id = X
         join izbiracki_mesta im on k.im_id = im.im_id
         join gragjani g on ck.g_id = g.g_id
where (select broj_prigovori from izleznost_count where im_id = im.im_id) > Y
order by broj_progovori desc, im.im_mesto asc;

Листање на секоја реализација заедно со резултат на сите кандидати за таа реализацијата

select ri.ri_id, ri.ri_datum, ri.ri_ime, k.kan_id, kan.g_id, g.g_ime, count(distinct gk.ug_id)
from realizacii_na_izbori ri
join realizacii_so_kandidaturi rk on ri.ri_id = rk.ri_id
left join kandidaturi k on rk.ri_id = k.ri_id
left join glasovi_za_kandidat gk on k.kan_id = gk.kan_id
left join kandidati kan on kan.g_id = k.g_id
left join gragjani g on k.g_id = g.g_id
group by ri.ri_id, ri.ri_datum, ri.ri_ime, k.kan_id, kan.g_id, g.g_ime

Листање на излезноста во сите општини со информација дали има цензус (за избори со општински кандидатури)

select o.o_ime,
       count(distinct g.g_id) vkupno,
       count(distinct gl.ug_id) glasale,
       case
           when count(distinct g.g_id) = 0 then true
           else count(distinct gl.ug_id) * 100.0 / count(distinct g.g_id) >= 35
       end ima_cenzus
from opstini o
left join adresi a on o.o_id = a.o_id
left join gragjani g on a.a_id = g.a_id
left join glasanja gl on gl.g_id = g.g_id and gl.ri_id = 1
group by o.o_ime

Детални податоци за излезноста на граѓани по избирачко место за реализација на избори со кандидати / кандидатска листа

select im.im_id, im.im_mesto,
       count(distinct gl.ug_id) vkupno_izlezeni,
       count(distinct gzk.ug_id) vazecki_glasovi,
       count(distinct gl.ug_id) - count(distinct gzk.ug_id) nevazceki_glasovi
from izbiracki_mesta im
left join glasanja gl on im.im_id = gl.im_id and gl.ri_id = 1
left join glasovi_za_kandidat gzk on gl.ug_id = gzk.ug_id
group by im.im_id, im.im_mesto

select im.im_id, im.im_mesto,
       count(distinct gl.ug_id) vkupno_izlezeni,
       count(distinct gzk.ug_id) vazecki_glasovi,
       count(distinct gl.ug_id) - count(distinct gzk.ug_id) nevazceki_glasovi
from izbiracki_mesta im
left join glasanja gl on im.im_id = gl.im_id and gl.ri_id = 1
left join glasovi_za_lista gzk on gl.ug_id = gzk.ug_id
group by im.im_id, im.im_mesto
Last modified 4 months ago Last modified on 01/29/24 16:22:24
Note: See TracWiki for help on using the wiki.