ダッシュボードレポート - ユーザータイプ別

これは、ユーザータイプ別のダッシュボードレポートのSQLバージョンです。

このレポートは、Discourseコミュニティ内の特定の役割とステータスを持つユーザーの数をカウントします。ユーザーは、管理者、モデレーター、一時停止中、ミュート中の4つの異なるグループに分類されます。このレポートの目的は、コミュニティマネージャーにユーザータイプの分布と、一時停止またはミュートによるアクセス制限のあるユーザーの概要を迅速に把握させることです。

SELECT "Type", "Count" FROM (
    SELECT 'Admin' AS "Type", COUNT(id) AS "Count", 1 rk FROM users WHERE admin = true AND id > 0
    UNION SELECT 'Moderator', COUNT(id), 2 FROM users WHERE moderator = true AND id > 0
    UNION SELECT 'Suspended', COUNT(id), 3 FROM users WHERE suspended_till > current_date
    UNION SELECT 'Silenced', COUNT(id), 4 FROM users WHERE silenced_till > current_date) AS data
ORDER BY rk

SQLクエリの説明

  • クエリは、3つの列(「Type」、「Count」、および論理的な順序(管理者、モデレーター、一時停止中、ミュート中)で最終結果を保証するためのランキング列 rk)を持つ派生テーブル data を作成します。
  • 各ユーザーの役割またはステータス(管理者、モデレーター、一時停止中、ミュート中)について、SELECT ステートメントは条件に一致するユーザーの数をカウントします。
    • 管理者は admin = true で識別されます。
    • モデレーターは moderator = true で識別されます。
    • 一時停止中のユーザーは、suspended_till の日付が未来であるユーザー(suspended_till > current_date)です。
    • ミュート中のユーザーは、silenced_till の日付が未来であるユーザー(silenced_till > current_date)です。
  • SELECT ステートメントには、順序付けのためにハードコードされたランク(rk)が含まれています。
  • UNION 演算子は、4つの SELECT ステートメントの結果を単一の結果セットに結合するために使用されます。
  • 外側の SELECT ステートメントは、派生テーブルから「Type」と「Count」を取得し、rk 列で結果を並べ替えます。

結果例

Type Count
Admin 14
Moderator 30
Suspended 3
Silenced 2
「いいね!」 1