これは、トップの無視/ミュートされたユーザーのダッシュボードレポートのSQLバージョンです。
このダッシュボードレポートは、管理者に、指定された開始日と終了日の間にプラットフォームのどのユーザーが他のメンバーによって無視またはミュートされたかについての洞察を提供します。無視されたユーザーとは、メンバーによって選択的に除外され、その投稿がメンバーに見えないようにされたユーザーであり、ミュートされたユーザーとは、メンバーが通知を受け取らないことを選択したユーザーです。
このレポートは、コミュニティ内で摩擦を引き起こしているユーザー、またはその行動が他のメンバーのエンゲージメントを低下させているユーザーを特定できます。レポートは、頻繁に無視またはミュートされたユーザーに連絡して行動に対処するなどのモデレーションの決定に役立つか、コミュニティ全体で注意が必要な問題があるかどうかをより広範に理解するのに役立ちます。
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2025-01-01
WITH ignored_users AS (
SELECT
ignored_user_id AS user_id,
COUNT(*) AS ignores_count
FROM ignored_users
WHERE created_at >= :start_date
AND created_at <= :end_date
GROUP BY ignored_user_id
ORDER BY COUNT(*) DESC
),
muted_users AS (
SELECT
muted_user_id AS user_id,
COUNT(*) AS mutes_count
FROM muted_users
WHERE created_at >= :start_date
AND created_at <= :end_date
GROUP BY muted_user_id
ORDER BY COUNT(*) DESC
)
SELECT
u.id AS user_id,
u.username AS username,
ig.ignores_count AS ignores_count,
COALESCE(mu.mutes_count, 0) AS mutes_count,
ig.ignores_count + COALESCE(mu.mutes_count, 0) AS total
FROM users AS u
JOIN ignored_users AS ig ON ig.user_id = u.id
LEFT OUTER JOIN muted_users AS mu ON mu.user_id = u.id
ORDER BY total DESC
SQLクエリの説明
このSQLクエリはいくつかのステップで機能します。
- 日付パラメータ:
- クエリは、レポートの日付範囲を定義する
:start_dateと:end_dateの2つのパラメータを受け入れます。両方の日付パラメータはYYYY-MM-DDの日付形式を受け入れます。
- クエリは、レポートの日付範囲を定義する
- 共通テーブル式 (CTE):
ignored_usersCTEはignored_user_idを選択し、そのIDがignored_usersテーブルに現れる回数(ユーザーが無視された回数を示す)をカウントし、結果を:start_dateと:end_dateの間でフィルタリングします。muted_usersCTEは同様ですが、muted_usersテーブルからmuted_user_idを選択し、日付フィルタ内でインスタンスをカウントします。
- メインSELECTステートメント:
usersテーブルからユーザーの詳細と、ignored_usersおよびmuted_usersCTEからのカウントを選択します。ignores_countはignored_usersCTEから直接取得されます。mutes_countはmuted_usersCTEから取得されますが、NULL(ユーザーがミュートされていないことを意味する)の場合はCOALESCE関数を使用して0に置き換えられます。- 合計は、無視とミュートを合計して計算されます。
- JOIN: メインクエリは
ignored_usersとのJOINを利用して、少なくとも1回無視されたすべてのユーザーを含め、muted_usersとのLEFT OUTER JOINを利用して、ミュートされていない可能性のあるユーザーも含めます。 - ORDER BY: レポートは、合計の無視とミュートの数に基づいて降順に並べ替えられ、最も「問題のある」ユーザーがレポートの上部に表示されます。
サンプル結果
| user | username | ignores_count | mutes_count | total |
|---|---|---|---|---|
| user1 | user1 | 4 | 1 | 5 |
| user2 | user2 | 3 | 0 | 3 |
| user3 | user3 | 1 | 2 | 3 |