ダッシュボードレポート - 信頼レベルごとのユーザー

これは、トラストラブルレベルごとのユーザーのダッシュボードレポートのSQLバージョンです。

このレポートは、Discourseコミュニティ内のユーザーのトラストラブルレベルの分布の概要を提供します。

SELECT 
    CASE
        WHEN trust_level = 0 THEN 'newuser'
        WHEN trust_level = 1 THEN 'basic'
        WHEN trust_level = 2 THEN 'member'
        WHEN trust_level = 3 THEN 'regular'
        WHEN trust_level = 4 THEN 'leader'
        ELSE 'unknow'
    END,
    COUNT(users) 
FROM users
WHERE 
    id > 0
    AND NOT EXISTS(
                     SELECT 1
                     FROM anonymous_users a
                     WHERE a.user_id = users.id
                  )
GROUP BY trust_level
ORDER BY trust_level

クエリの内訳

  • SELECT CASE: このクエリの部分は、CASEステートメントを使用して、各トラストラブルレベルに人間が読める名前を割り当てます。数値のtrust_levelフィールドを、「newuser」、「basic」、「member」、「regular」、「leader」などの文字列に変換し、理解しやすくします。
  • COUNT(users): この関数は、各トラストラブルレベル内のユーザー数をカウントします。
  • FROM users: クエリは、コミュニティ内のすべてのユーザーアカウントを含むusersテーブルからデータを取得しています。
  • WHERE id > 0: この条件は、IDが0以下のシステムアカウントを除外し、実際のユーザーのみが考慮されることを保証します。
  • AND NOT EXISTS: このサブクエリは、anonymous_usersテーブルをチェックして、匿名としてマークされているユーザーを除外します。ユーザーがanonymous_usersテーブルにエントリを持っている場合、カウントには含まれません。
  • GROUP BY trust_level: この句は、結果をトラストラブルレベルごとにグループ化し、各レベルごとにカウントが個別に実行されることを保証します。
  • ORDER BY trust_level: 最後に、結果はtrust_levelフィールドで並べ替えられ、出力が最も低いレベル(newuser)から最も高いレベル(leader)までソートされることが保証されます。

結果例

case count
newuser 1235
basic 234
member 345
regular 56
leader 23
「いいね!」 1