Version 4 (modified by 2 weeks ago) ( diff ) | ,
---|
Напредни извештаи од базата (SQL и складирани процедури)
1. Извештај: Број на настани по година и земја
Опис: Овој извештај го прикажува бројот на настани по година, групирани според земјата.
SELECT EXTRACT(YEAR FROM e.sql_date) AS year, a.country_code, COUNT(e.global_event_id) AS event_count FROM events e JOIN event_details ed ON e.global_event_id = ed.global_event_id JOIN actors a ON ed.actor_id = a.actor_id GROUP BY year, a.country_code ORDER BY year DESC, event_count DESC;
---
2. Извештај: Топ 5 актери според бројот на споменувања
Опис: Овој извештај ги прикажува топ 5 актери според бројот на споменувања во настани.
SELECT a.actor_name, COUNT(ed.actor_id) AS mention_count FROM event_details ed JOIN actors a ON ed.actor_id = a.actor_id GROUP BY a.actor_name ORDER BY mention_count DESC LIMIT 5;
---
3. Извештај: Просечен тон на настани по месец
Опис: Овој извештај ја пресметува просечната вредност на тонот на настаните за секој месец.
SELECT TO_CHAR(e.sql_date, 'YYYY-MM') AS month, AVG(e.avg_tone) AS average_tone FROM events e GROUP BY month ORDER BY month DESC;
---
4. Извештај: Број на конфликти во квартален период по земја
Опис: Овој извештај го пресметува бројот на конфликти во тековниот квартал за секоја земја.
SELECT EXTRACT(YEAR FROM e.sql_date) AS year, EXTRACT(QUARTER FROM e.sql_date) AS quarter, a.country_code, COUNT(e.global_event_id) AS conflict_count FROM events e JOIN event_details ed ON e.global_event_id = ed.global_event_id JOIN actors a ON ed.actor_id = a.actor_id WHERE e.sql_date >= DATE_TRUNC('quarter', CURRENT_DATE) GROUP BY year, quarter, a.country_code ORDER BY year DESC, quarter DESC, conflict_count DESC;
---
5. Извештај: Конфликти според нивото на доверливост
Опис: Овој извештај ги групира настаните според нивото на доверливост на предвидувањето.
SELECT e.event_code, COUNT(e.global_event_id) AS event_count, ROUND(AVG(p.confidence_score), 2) AS avg_confidence FROM events e JOIN predictions p ON e.global_event_id = p.event_id GROUP BY e.event_code ORDER BY avg_confidence DESC;
---
6. Извештај: Конфликти според број на извори
Опис: Ги прикажува најзначајните конфликти според бројот на извори што ги известиле.
SELECT e.global_event_id, e.sql_date, e.event_code, e.num_sources FROM events e ORDER BY e.num_sources DESC LIMIT 10;
---
7. Извештај: Аналитика на настани и интеракција на актери
Опис: Овој извештај ги анализира податоците од EVENT_ANALYTICS, вклучувајќи конфликтни коефициенти, број на спомнувања, и просечен тон за да се утврдат обрасци на интеракција меѓу актери и настани.
SELECT ea.actor_id, a.actor_name, ea.event_id, e.event_code, ea.date, ea.conflict_coefficient, ea.mentions_count, ea.avg_tone FROM event_analytics ea JOIN actors a ON ea.actor_id = a.actor_id JOIN events e ON ea.event_id = e.global_event_id WHERE ea.date BETWEEN '2024-01-01' AND '2024-12-31' ORDER BY ea.conflict_coefficient DESC;
8. Извештај: Идентификација на конфликтни жаришта
Опис: Овој извештај комбинира податоци од EVENTS, EVENT_ANALYTICS, PREDICTIONS, и CONFLICT_RISK за да идентификува зони со највисока веројатност за идни конфликти.
SELECT l.full_name AS location, COUNT(ea.event_id) AS event_count, AVG(ea.conflict_coefficient) AS avg_conflict_risk, SUM(ea.mentions_count) AS total_mentions FROM event_analytics ea JOIN locations l ON ea.event_id = l.location_id WHERE ea.date >= CURRENT_DATE - INTERVAL '6 months' GROUP BY l.full_name HAVING AVG(ea.conflict_coefficient) > 3.5 ORDER BY avg_conflict_risk DESC LIMIT 10;
9. Извештај: Тренд на зголемување на конфликтите во последните 6 месеци
Опис: Ги прикажува земјите со најголемо зголемување на бројот на конфликти.
SELECT a.country_code, COUNT(e.global_event_id) AS conflict_count FROM events e JOIN event_details ed ON e.global_event_id = ed.global_event_id JOIN actors a ON ed.actor_id = a.actor_id WHERE e.sql_date >= CURRENT_DATE - INTERVAL '6 months' GROUP BY a.country_code ORDER BY conflict_count DESC LIMIT 10;
---
10. Складирана процедура: Додавање на нов корисник
Опис: Додава нов корисник во системот.
CREATE OR REPLACE PROCEDURE add_new_user( p_first_name VARCHAR, p_last_name VARCHAR, p_email VARCHAR, p_password_hash VARCHAR, p_role_id INT, p_register_date DATE ) AS $$ BEGIN INSERT INTO users (first_name, last_name, email, password_hash, role_id, register_date) VALUES (p_first_name, p_last_name, p_email, p_password_hash, p_role_id, p_register_date); END; $$ LANGUAGE plpgsql;
---
11. Складирана процедура: Додавање нова претплата
Опис: Ја додава претплатата на корисник за следење на конфликти.
CREATE OR REPLACE PROCEDURE add_subscription( p_user_id INT, p_plan_id INT, p_start_date DATE, p_end_date DATE, p_status VARCHAR ) AS $$ BEGIN INSERT INTO subscription (user_id, plan_id, start_date, end_date, status) VALUES (p_user_id, p_plan_id, p_start_date, p_end_date, p_status); END; $$ LANGUAGE plpgsql;
---
12. Складирана процедура: Ажурирање на статусот на корисник
Опис: Оваа процедура го ажурира статусот на даден корисник.
CREATE OR REPLACE PROCEDURE update_user_status( p_user_id INT, p_role_id INT ) AS $$ BEGIN UPDATE users SET role_id = p_role_id WHERE user_id = p_user_id; END; $$ LANGUAGE plpgsql;
---
13. Складирана процедура: Генерирање на известувања за конфликти
Опис: Оваа процедура автоматски генерира известувања за корисниците кои следат одредени конфликти.
CREATE OR REPLACE PROCEDURE generate_notifications() AS $$ BEGIN INSERT INTO notifications (user_id, event_id, notification_date, status) SELECT s.user_id, e.global_event_id, CURRENT_DATE, 'Pending' FROM subscription s JOIN events e ON s.plan_id = e.event_code WHERE e.sql_date >= CURRENT_DATE - INTERVAL '7 days'; END; $$ LANGUAGE plpgsql;