これは、トラストラブルレベルごとのユーザーのダッシュボードレポートの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 |