特定のユーザーグループによって解決されたトピックの割合を示すData Explorerクエリ

Data Explorer を使っている皆さん、こんにちは!

@michebs さん、少々お付き合いください :smiley: - あと 2 つだけ質問があります。他の皆さんにも役立つことを願っています)

特定のグループ別に月と年で解決されたトピックの割合(%)を算出する Data Explorer クエリを作成した人はいますか?

結果は下のようになりますが、最後の列がパーセンテージになります。

このようなことはもちろん可能です。すべてのデータは存在します。

「解決率 %」とは、具体的に何を指すのでしょうか。

  • 投稿は 1 月に行われました
  • グループ「awesome」は 2 月に回答が採用されました
  • 2 月には、他のグループやユーザーによって 73 のトピックが解決されました

つまり、グループ「awesome」の 2 月の解決率は 1.35% と考えられますか?

ある月内に100件の解決策があったとします。特定のグループに所属する20人がおり、彼らが返信を解決策としてマークし始めました。その結果、合計20件が解決策としてマークされました。スクリプトで彼らのプライマリグループIDを指定し、月別にデータを取得して、今月は20/100(20%)と表示するクエリを作成したいと考えています。

「いいね!」 1

こんにちは、Konrad さん。遅れて申し訳ありません。
いくつかのクエリを検証中ですが、この結果はお待ちいただいているものですか?

year month group_name tt_groups total %
2021 1 team1 40 70 57
2021 1 team2 30 70 43
「いいね!」 1

クエリをより詳細にし、将来的に理解しやすく、保守しやすくするために修正を試みました。

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 


これがご期待の結果かどうか、あるいは調整が必要かどうかお知らせください。

ミシェル

「いいね!」 3

ご心配なく!あなたは私の救世主です!:smiley:

ほぼ完璧です!tt_groups と total 列は不要で、パーセンテージの数値のみが必要です。group_name 列についても、1 つのグループに対するクエリとなるため、これも不要です。クエリコード内では primary_group_id を指定するだけで、この特定のグループの解決策のみを検索するようにします。

「いいね!」 1

調整完了。:slightly_smiling_face:

-- [params]
-- string :primary_group_id

WITH users_groups AS (
    SELECT 
        user_id, 
        g.id,
        g.name AS 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
「いいね!」 4

完璧!まさに探していたものです!

「いいね!」 2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.