Data Explorer を使っている皆さん、こんにちは!
(@michebs さん、少々お付き合いください
- あと 2 つだけ質問があります。他の皆さんにも役立つことを願っています)
特定のグループ別に月と年で解決されたトピックの割合(%)を算出する Data Explorer クエリを作成した人はいますか?
結果は下のようになりますが、最後の列がパーセンテージになります。
Data Explorer を使っている皆さん、こんにちは!
(@michebs さん、少々お付き合いください
- あと 2 つだけ質問があります。他の皆さんにも役立つことを願っています)
特定のグループ別に月と年で解決されたトピックの割合(%)を算出する Data Explorer クエリを作成した人はいますか?
結果は下のようになりますが、最後の列がパーセンテージになります。
このようなことはもちろん可能です。すべてのデータは存在します。
「解決率 %」とは、具体的に何を指すのでしょうか。
つまり、グループ「awesome」の 2 月の解決率は 1.35% と考えられますか?
ある月内に100件の解決策があったとします。特定のグループに所属する20人がおり、彼らが返信を解決策としてマークし始めました。その結果、合計20件が解決策としてマークされました。スクリプトで彼らのプライマリグループIDを指定し、月別にデータを取得して、今月は20/100(20%)と表示するクエリを作成したいと考えています。
こんにちは、Konrad さん。遅れて申し訳ありません。
いくつかのクエリを検証中ですが、この結果はお待ちいただいているものですか?
| year | month | group_name | tt_groups | total | % |
|---|---|---|---|---|---|
| 2021 | 1 | team1 | 40 | 70 | 57 |
| 2021 | 1 | team2 | 30 | 70 | 43 |
クエリをより詳細にし、将来的に理解しやすく、保守しやすくするために修正を試みました。
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
これがご期待の結果かどうか、あるいは調整が必要かどうかお知らせください。
ミシェル
ご心配なく!あなたは私の救世主です!![]()
ほぼ完璧です!tt_groups と total 列は不要で、パーセンテージの数値のみが必要です。group_name 列についても、1 つのグループに対するクエリとなるため、これも不要です。クエリコード内では primary_group_id を指定するだけで、この特定のグループの解決策のみを検索するようにします。
調整完了。![]()
-- [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
完璧!まさに探していたものです!
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.