Changes between Version 4 and Version 5 of AdvancedReports


Ignore:
Timestamp:
01/25/26 17:33:23 (4 weeks ago)
Author:
213140
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v4 v5  
    5151    Completion_Rate_Percentage DESC;
    5252}}}
     53
     54
     55== Годишен извештај за честота на постирање блогови и број на коментари по блог кај луѓе кој имаат отидено на терапевт барем 10 пати, според тоа кој терапевт го посетуваат
     56
     57{{{
     58WITH LoyalPatients AS (
     59    SELECT
     60        c.id_patient,
     61        c.id_therapist,
     62        u_t.name    AS therapist_name,
     63        u_t.surname AS therapist_surname
     64    FROM project.consultation c
     65        JOIN project.therapist t
     66            ON t.id_user = c.id_therapist
     67        JOIN project."user" u_t
     68            ON u_t.id_user = t.id_user
     69    GROUP BY
     70        c.id_patient,
     71        c.id_therapist,
     72        u_t.name,
     73        u_t.surname
     74    HAVING COUNT(c.id_consultation) >= 10
     75),
     76
     77BlogStats AS (
     78    SELECT
     79        b.id_patient,
     80        EXTRACT(YEAR FROM b.date_of_post) AS post_year,
     81        COUNT(DISTINCT b.id_blog)         AS blogs_count,
     82        COUNT(c.id_comment)               AS comments_count
     83    FROM project.blog b
     84        LEFT JOIN project.comment c
     85            ON c.id_blog = b.id_blog
     86    GROUP BY
     87        b.id_patient,
     88        EXTRACT(YEAR FROM b.date_of_post)
     89 )
     90
     91SELECT
     92    bs.post_year                                                AS "Година",
     93    lp.therapist_name || ' ' || lp.therapist_surname            AS "Терапевт",
     94    SUM(bs.blogs_count)                                         AS "Вкупно објавени блогови",
     95    SUM(bs.comments_count)                                      AS "Вкупно примени коментари",
     96    ROUND(AVG(bs.blogs_count), 2)                               AS "Просек блогови по пациент",
     97    ROUND(
     98        SUM(bs.comments_count)::DECIMAL
     99            / NULLIF(SUM(bs.blogs_count), 0),
     100        2
     101    )                                                           AS "Просек коментари по блог"
     102FROM LoyalPatients lp
     103    JOIN BlogStats bs
     104        ON bs.id_patient = lp.id_patient
     105GROUP BY
     106    bs.post_year,
     107    lp.id_therapist,
     108    lp.therapist_name,
     109    lp.therapist_surname
     110ORDER BY
     111    bs.post_year DESC,
     112    "Вкупно објавени блогови" DESC;
     113}}}
     114
     115
     116== Вкупна годишна анализа на блогови по месец во однос на внесување дневници во просек по месец
     117
     118{{{
     119WITH Blog_Monthly AS (
     120    SELECT
     121        EXTRACT(YEAR FROM b.date_of_post)  AS year,
     122        EXTRACT(MONTH FROM b.date_of_post) AS month,
     123        COUNT(b.id_blog)                   AS total_blogs,
     124        COUNT(DISTINCT b.id_patient)       AS active_bloggers
     125    FROM project.blog b
     126    GROUP BY 1, 2
     127),
     128
     129Diary_Monthly AS (
     130    SELECT
     131        EXTRACT(YEAR FROM d.date)  AS year,
     132        EXTRACT(MONTH FROM d.date) AS month,
     133        COUNT(d.id_diary)          AS total_diaries,
     134        COUNT(DISTINCT d.id_patient) AS active_diarists,
     135        AVG(d.daily_rating)        AS avg_monthly_mood
     136    FROM project.diary d
     137    GROUP BY 1, 2
     138),
     139
     140Monthly_Stats AS (
     141    SELECT
     142        COALESCE(bm.year, dm.year)   AS year,
     143        COALESCE(bm.month, dm.month) AS month,
     144        COALESCE(bm.total_blogs, 0)  AS total_blogs,
     145        COALESCE(bm.active_bloggers, 0) AS active_bloggers,
     146        COALESCE(dm.total_diaries, 0)   AS total_diaries,
     147        COALESCE(dm.active_diarists, 0) AS active_diarists,
     148        dm.avg_monthly_mood
     149    FROM Blog_Monthly bm
     150    FULL OUTER JOIN Diary_Monthly dm
     151    ON bm.year = dm.year
     152    AND bm.month = dm.month
     153)
     154
     155SELECT
     156    year  AS "Година",
     157    month AS "Месец",
     158
     159    total_blogs   AS "Вкупно Блогови",
     160    total_diaries AS "Вкупно Дневници",
     161
     162    ROUND(
     163        total_blogs::NUMERIC / NULLIF(active_bloggers, 0),
     164        2
     165    ) AS "Блогови по корисник",
     166
     167    ROUND(
     168        total_diaries::NUMERIC / NULLIF(active_diarists, 0),
     169        2
     170    ) AS "Дневници по корисник",
     171
     172    ROUND(avg_monthly_mood, 2) AS "Просечно Расположение (1-10)",
     173
     174    CASE
     175        WHEN total_diaries > total_blogs * 2 THEN 'Highly Private (Introspective)'
     176        WHEN total_blogs > total_diaries THEN 'Highly Social (Outspoken)'
     177        ELSE 'Balanced'
     178        END AS "Тип на Однесување",
     179
     180    ROUND(
     181        total_blogs::NUMERIC / NULLIF(total_blogs + total_diaries, 0) * 100,
     182        2
     183    ) || '%' AS "Јавност (%)"
     184
     185FROM Monthly_Stats
     186ORDER BY year DESC, month DESC;
     187}}}