Changes between Version 1 and Version 2 of advancedreports


Ignore:
Timestamp:
02/05/25 05:17:16 (2 weeks ago)
Author:
155036
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • advancedreports

    v1 v2  
    11== Напредни извештаи од базата (SQL и складирани процедури) ==
     2
     3=== 1. Извештај: Број на настани по година и земја ===
     4
     5**Опис:** Овој извештај го прикажува бројот на настани по година, групирани според земјата.
     6
     7{{{
     8SELECT
     9    EXTRACT(YEAR FROM e.sql_date) AS year,
     10    a.country_code,
     11    COUNT(e.global_event_id) AS event_count
     12FROM
     13    events e
     14JOIN
     15    event_details ed ON e.global_event_id = ed.global_event_id
     16JOIN
     17    actors a ON ed.actor_id = a.actor_id
     18GROUP BY
     19    year, a.country_code
     20ORDER BY
     21    year DESC, event_count DESC;
     22}}}
     23
     24---
     25
     26=== 2. Извештај: Топ 5 актери според бројот на споменувања ===
     27
     28**Опис:** Овој извештај ги прикажува топ 5 актери според бројот на споменувања во настани.
     29
     30{{{
     31SELECT
     32    a.actor_name,
     33    COUNT(ed.actor_id) AS mention_count
     34FROM
     35    event_details ed
     36JOIN
     37    actors a ON ed.actor_id = a.actor_id
     38GROUP BY
     39    a.actor_name
     40ORDER BY
     41    mention_count DESC
     42LIMIT 5;
     43}}}
     44
     45---
     46
     47=== 3. Извештај: Просечен тон на настани по месец ===
     48
     49**Опис:** Овој извештај ја пресметува просечната вредност на тонот на настаните за секој месец.
     50
     51{{{
     52SELECT
     53    TO_CHAR(e.sql_date, 'YYYY-MM') AS month,
     54    AVG(e.avg_tone) AS average_tone
     55FROM
     56    events e
     57GROUP BY
     58    month
     59ORDER BY
     60    month DESC;
     61}}}
     62
     63---
     64
     65=== 4. Извештај: Број на конфликти во квартален период по земја ===
     66
     67**Опис:** Овој извештај го пресметува бројот на конфликти во тековниот квартал за секоја земја.
     68
     69{{{
     70SELECT
     71    EXTRACT(YEAR FROM e.sql_date) AS year,
     72    EXTRACT(QUARTER FROM e.sql_date) AS quarter,
     73    a.country_code,
     74    COUNT(e.global_event_id) AS conflict_count
     75FROM
     76    events e
     77JOIN
     78    event_details ed ON e.global_event_id = ed.global_event_id
     79JOIN
     80    actors a ON ed.actor_id = a.actor_id
     81WHERE
     82    e.sql_date >= DATE_TRUNC('quarter', CURRENT_DATE)
     83GROUP BY
     84    year, quarter, a.country_code
     85ORDER BY
     86    year DESC, quarter DESC, conflict_count DESC;
     87}}}
     88
     89---
     90
     91=== 5. Извештај: Конфликти според нивото на доверливост ===
     92
     93**Опис:** Овој извештај ги групира настаните според нивото на доверливост на предвидувањето.
     94
     95{{{
     96SELECT
     97    e.event_code,
     98    COUNT(e.global_event_id) AS event_count,
     99    ROUND(AVG(p.confidence_score), 2) AS avg_confidence
     100FROM
     101    events e
     102JOIN
     103    predictions p ON e.global_event_id = p.event_id
     104GROUP BY
     105    e.event_code
     106ORDER BY
     107    avg_confidence DESC;
     108}}}
     109
     110---
     111
     112=== 6. Извештај: Конфликти според број на извори ===
     113
     114**Опис:** Ги прикажува најзначајните конфликти според бројот на извори што ги известиле.
     115
     116{{{
     117SELECT
     118    e.global_event_id,
     119    e.sql_date,
     120    e.event_code,
     121    e.num_sources
     122FROM
     123    events e
     124ORDER BY
     125    e.num_sources DESC
     126LIMIT 10;
     127}}}
     128
     129---
     130
     131=== 7. Извештај: Тренд на зголемување на конфликтите во последните 6 месеци ===
     132
     133**Опис:** Ги прикажува земјите со најголемо зголемување на бројот на конфликти.
     134
     135{{{
     136SELECT
     137    a.country_code,
     138    COUNT(e.global_event_id) AS conflict_count
     139FROM
     140    events e
     141JOIN
     142    event_details ed ON e.global_event_id = ed.global_event_id
     143JOIN
     144    actors a ON ed.actor_id = a.actor_id
     145WHERE
     146    e.sql_date >= CURRENT_DATE - INTERVAL '6 months'
     147GROUP BY
     148    a.country_code
     149ORDER BY
     150    conflict_count DESC
     151LIMIT 10;
     152}}}
     153
     154---
     155
     156=== 8. Складирана процедура: Додавање на нов корисник ===
     157
     158**Опис:** Додава нов корисник во системот.
     159
     160{{{
     161CREATE OR REPLACE PROCEDURE add_new_user(
     162    p_first_name VARCHAR,
     163    p_last_name VARCHAR,
     164    p_email VARCHAR,
     165    p_password_hash VARCHAR,
     166    p_role_id INT,
     167    p_register_date DATE
     168) AS $$
     169BEGIN
     170    INSERT INTO users (first_name, last_name, email, password_hash, role_id, register_date)
     171    VALUES (p_first_name, p_last_name, p_email, p_password_hash, p_role_id, p_register_date);
     172END;
     173$$ LANGUAGE plpgsql;
     174}}}
     175
     176---
     177
     178=== 9. Складирана процедура: Додавање нова претплата ===
     179
     180**Опис:** Ја додава претплатата на корисник за следење на конфликти.
     181
     182{{{
     183CREATE OR REPLACE PROCEDURE add_subscription(
     184    p_user_id INT,
     185    p_plan_id INT,
     186    p_start_date DATE,
     187    p_end_date DATE,
     188    p_status VARCHAR
     189) AS $$
     190BEGIN
     191    INSERT INTO subscription (user_id, plan_id, start_date, end_date, status)
     192    VALUES (p_user_id, p_plan_id, p_start_date, p_end_date, p_status);
     193END;
     194$$ LANGUAGE plpgsql;
     195}}}
     196
     197---
     198
     199=== 10. Складирана процедура: Ажурирање на статусот на корисник ===
     200
     201**Опис:** Оваа процедура го ажурира статусот на даден корисник.
     202
     203{{{
     204CREATE OR REPLACE PROCEDURE update_user_status(
     205    p_user_id INT,
     206    p_role_id INT
     207) AS $$
     208BEGIN
     209    UPDATE users
     210    SET role_id = p_role_id
     211    WHERE user_id = p_user_id;
     212END;
     213$$ LANGUAGE plpgsql;
     214}}}
     215
     216---
     217
     218=== 11. Складирана процедура: Генерирање на известувања за конфликти ===
     219
     220**Опис:** Оваа процедура автоматски генерира известувања за корисниците кои следат одредени конфликти.
     221
     222{{{
     223CREATE OR REPLACE PROCEDURE generate_notifications() AS $$
     224BEGIN
     225    INSERT INTO notifications (user_id, event_id, notification_date, status)
     226    SELECT
     227        s.user_id,
     228        e.global_event_id,
     229        CURRENT_DATE,
     230        'Pending'
     231    FROM
     232        subscription s
     233    JOIN
     234        events e ON s.plan_id = e.event_code
     235    WHERE
     236        e.sql_date >= CURRENT_DATE - INTERVAL '7 days';
     237END;
     238$$ LANGUAGE plpgsql;
     239}}}
     240
     241
     242