Requête Data Explorer pour % de sujets résolus par groupe d'utilisateurs spécifique

Salut à tous ceux qui utilisent Data Explorer !

(Indulgez-moi @michebs :smiley: - Je n’aurai plus que deux questions, j’espère que d’autres en bénéficieront aussi)

Est-ce que quelqu’un a déjà créé une requête Data Explorer pour le % de sujets résolus par un groupe spécifique, par mois et par année ?

Le résultat serait donc comme ceci, mais la dernière colonne sera en pourcentage

Nous pouvons tout à fait organiser quelque chose comme ça, toutes les données existent.

« % résolu »… que voulez-vous dire exactement.

  • Le post a été publié en janvier
  • Le groupe « awesome » a obtenu une réponse acceptée en février
  • 73 autres sujets ont reçu des solutions en février par d’autres groupes et utilisateurs.

Donc, je suppose que le groupe « awesome » a un taux de résolution de 1,35 % pour février ?

Disons qu’il y a 100 solutions dans un mois. Vingt personnes appartiennent à un certain groupe et ont commencé à marquer leurs réponses comme solutions, soit un total de vingt. Je souhaite avoir une requête où je spécifierai leur ID de groupe principal dans le script et récupérerai les données par mois pour afficher, pour ce mois-ci, 20/100 - 20 %.

Bonjour Konrad, désolé pour le délai.
Je suis toujours en train de valider certaines requêtes, mais je saisis l’occasion pour confirmer : est-ce bien le résultat que vous attendiez ?

année mois nom_du_groupe tt_groupes total %
2021 1 team1 40 70 57
2021 1 team2 30 70 43

J’ai essayé de rendre les requêtes plus détaillées pour faciliter leur compréhension et leur maintenance à l’avenir.

WITH users_groups AS (
    SELECT 
        user_id, 
        g.id,
        g.name group_name 
    FROM users u
    INNER JOIN user_actions ua ON ua.user_id = u.id
    LEFT JOIN groups g ON g.id = u.primary_group_id
    WHERE ua.action_type = 15
    GROUP BY user_id, g.id
),
    
tt_solution_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
		COUNT(*) AS "total"
	FROM user_actions ua
	WHERE ua.action_type = 15
	GROUP BY date_part('year', created_at), date_part('month', created_at)
	ORDER BY date_part('year', created_at) ASC, date_part('month', created_at)
),
	
tt_solution_groups_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
        ug.group_name,
    	COUNT(*) AS "tt_groups"
    FROM user_actions ua
    INNER JOIN users_groups ug ON ug.user_id = ua.user_id
    WHERE ua.action_type = 15
    GROUP BY ug.group_name, date_part('year', created_at), date_part('month', created_at)
    ORDER BY date_part('year', created_at) ASC, date_part('month', created_at), ug.group_name)
    
SELECT 
    ts.year,
    ts.month,
    COALESCE(tsg.group_name,'without group'),
    tt_groups,
    total,
    TRUNC((tt_groups::decimal/total::decimal) *100,1) AS "%"
FROM tt_solution_groups_by_month tsg  
INNER JOIN tt_solution_by_month ts 
    ON ts.year = tsg.year AND ts.month = tsg.month 


Faites-moi savoir si c’est bien le résultat attendu ou si je dois ajuster quelque chose.

Michelle

Pas de souci ! Tu es mon sauveur ici ! :smiley:

Presque parfait ! Je n’ai pas besoin des colonnes tt_groups et total, juste du pourcentage. Pour la colonne group_name, comme la requête concerne un seul groupe, il n’est pas nécessaire de l’inclure non plus. Dans le code de la requête, je spécifierai simplement primary_group_id afin qu’elle ne recherche que les solutions de ce groupe précis.

Ajusté. :slightly_smiling_face:

-- [params]
-- string :primary_group_id

WITH users_groups AS (
    SELECT 
        user_id, 
        g.id,
        g.name group_name 
    FROM users u
    INNER JOIN user_actions ua ON ua.user_id = u.id
    LEFT JOIN groups g ON g.id = u.primary_group_id
    WHERE ua.action_type = 15
    AND u.primary_group_id = :primary_group_id
    GROUP BY user_id, g.id
),
    
tt_solution_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
		COUNT(*) AS "total"
	FROM user_actions ua
	WHERE ua.action_type = 15
	GROUP BY date_part('year', created_at), date_part('month', created_at)
	ORDER BY date_part('year', created_at) ASC, date_part('month', created_at)
),
	
tt_solution_groups_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
        ug.group_name,
    	COUNT(*) AS "tt_groups"
    FROM user_actions ua
    INNER JOIN users_groups ug ON ug.user_id = ua.user_id
    WHERE ua.action_type = 15
    GROUP BY ug.group_name, date_part('year', created_at), date_part('month', created_at)
    ORDER BY date_part('year', created_at) ASC, date_part('month', created_at), ug.group_name)
    
SELECT 
    ts.year,
    ts.month,
    TRUNC((tt_groups::decimal/total::decimal) *100,1) AS "%"
FROM tt_solution_groups_by_month tsg  
INNER JOIN tt_solution_by_month ts 
    ON ts.year = tsg.year AND ts.month = tsg.month

Parfait ! C’est exactement ce que je cherchais !