# 仪表盘报告 - 各类型用户

**URL:** https://meta.discourse.org/t/dashboard-report-users-per-type/288569
**Category:** Data & reporting
**Tags:** sql-query, dashboard-reports, dashboard-sql
**Created:** [2023年十二月13日 21:44 UTC](https://meta.discourse.org/t/dashboard-report-users-per-type/288569 "2023-12-13T21:44:14Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![SaraDev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/saradev/32/335139_2.png) [@SaraDev](https://meta.discourse.org/u/SaraDev)
#### Post date: [2023年十二月13日 21:44 UTC](https://meta.discourse.org/t/dashboard-report-users-per-type/288569/1 "2023-12-13T21:44:15Z")

</div>

这是用户类型仪表板报告的 SQL 版本。

本报告提供 Discourse 社区中特定角色和状态的用户计数。它将用户分为四类：管理员、版主、被暂停用户和被静默用户。本报告的目的是让社区经理快速了解用户类型的分布以及因暂停或静默而受到访问限制的用户。

```sql
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 查询说明

- 该查询创建了一个派生表 `data`，其中包含三列：“Type”（类型）、“Count”（计数）和一个排名列 `rk`，以确保最终结果按逻辑顺序排列（管理员、版主、被暂停、被静默）。
- 对于每个用户角色或状态（管理员、版主、被暂停、被静默），一个 `SELECT` 语句会计算匹配标准的用户的数量：
  - 管理员通过 `admin = true` 识别。
  - 版主通过 `moderator = true` 识别。
  - 被暂停用户是指 `suspended_till` 日期在未来（`suspended_till > current_date`）的用户。
  - 被静默用户是指 `silenced_till` 日期在未来（`silenced_till > current_date`）的用户。

- 每个 `SELECT` 语句都包含一个硬编码的排名（`rk`）用于排序。
- `UNION` 运算符用于将四个 `SELECT` 语句的结果合并到一个结果集中。
- 外部 `SELECT` 语句然后从派生表中检索“Type”和“Count”，并按 `rk` 列对结果进行排序。

### 示例结果

| 类型 | 计数 |
| --- | --- |
| 管理员 | 14 |
| 版主 | 30 |
| 被暂停 | 3 |
| 被静默 | 2 |
