これは、ユーザータイプ別のダッシュボードレポートの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 |