Nombre moyen de réponses des membres par sujet (hors personnel)

Je pense que quelque chose comme ceci vous donnerait les chiffres que vous recherchez :

-- [params]
-- date :start_date
-- date :end_date


WITH staff_data AS (

    SELECT user_id, true as is_staff
    FROM group_users
    WHERE group_id = 3
),

month_stats AS (

    SELECT
        date_trunc('month', p.created_at)::date AS month,
        COUNT(*) FILTER (WHERE p.post_number = 1) AS total_topics,
        COUNT(*) FILTER (WHERE p.post_number <> 1) AS total_posts,
        COUNT(DISTINCT p.user_id) FILTER (WHERE p.post_number <> 1 AND is_staff IS NOT TRUE) AS non_staff_users,
        COUNT(*) FILTER (WHERE p.post_number <> 1 AND is_staff IS NOT TRUE) AS non_staff_posts,
        COUNT(DISTINCT p.user_id) FILTER (WHERE p.post_number <> 1 AND is_staff) AS staff_users,
        COUNT(*) FILTER (WHERE p.post_number <> 1 AND is_staff) AS staff_posts
    FROM posts p
      LEFT JOIN topics t ON t.id = p.topic_id
      LEFT JOIN staff_data s ON p.user_id = s.user_id
    WHERE p.created_at::date BETWEEN :start_date AND :end_date
      AND t.archetype = 'regular'
      AND t.deleted_at IS NULL
      AND p.deleted_at IS NULL
      AND p.post_type = 1
      AND p.user_id > 0
    GROUP BY month
)

SELECT
    ms.month AS "Mois",
    ms.total_topics AS "Tous les sujets",
    ms.total_posts AS "Tous les messages",
    ms.non_staff_posts AS "Messages non-staff",
    ROUND(ms.non_staff_posts * 100.0 / NULLIF(ms.total_posts, 0),1) || '%' AS "Messages non-staff (% du total)",
    ms.non_staff_posts / NULLIF(ms.total_topics, 0) AS "Messages non-staff moyens par sujet",
    ms.non_staff_users AS "Utilisateurs non-staff ayant posté",
    ms.staff_posts AS "Messages staff",
    ROUND(ms.staff_posts * 100.0 / NULLIF(ms.total_posts, 0),1) || '%' AS "Messages staff (% du total)",
    ms.staff_posts / NULLIF(ms.total_topics, 0) AS "Messages staff moyens par sujet",
    ms.staff_users AS "Utilisateurs staff ayant posté"
FROM month_stats ms
ORDER BY "Mois"

Ce qui vous donnerait quelque chose comme ceci :

Et un petit texte en prime : :slight_smile:

Cette requête est conçue pour fournir un résumé statistique mensuel de l’activité du forum, en se concentrant spécifiquement sur la distinction entre les contributions des utilisateurs « staff » et « non-staff » dans un délai donné. Les métriques calculées comprennent le nombre total de sujets créés, tous les messages postés, le nombre d’utilisateurs uniques non-staff ayant posté, le nombre et le pourcentage de messages postés par des non-staff, le nombre moyen de messages non-staff par sujet, ainsi que les chiffres correspondants pour les membres du staff. Les informations visent à donner un aperçu de l’engagement des utilisateurs, de la génération de contenu et du taux de participation du staff par rapport aux membres non-staff dans les discussions du forum. La requête garantit l’exactitude en ne considérant que les sujets « réguliers » (non-PM) et en excluant les messages ou sujets supprimés, les chuchotements/petits messages/actions de modération, et les messages des utilisateurs système, dans la plage de dates spécifiée.

Pour celui-ci, le critère « staff » est qu’ils font partie du groupe automatique @staff, qui comprend à la fois les administrateurs et les modérateurs - bien que cela puisse être ajusté pour cibler uniquement les administrateurs, ou même un groupe personnalisé d’employés qui ne sont techniquement pas du « staff du site » en tant que tel. Si vous souhaitez définitivement exclure les modérateurs, vous pouvez remplacer cet group_id au début par ‘1’. :+1:

Est-ce le genre de chose que vous recherchez ?