Dashboard Report - Users Per Type

AI-generated summary

The Dashboard Report - Users Per Type is an SQL query that provides a count of users by specific roles and statuses within a Discourse community. The report categorizes users into four groups: Admins, Moderators, Suspended, and Silenced users. The query uses a derived table with a ranking column to ensure logical ordering of the results. It identifies users by their role or status using conditions such as admin = true and suspended_till > current_date. The results are combined using the UNION operator and ordered by rank. An example result set shows the count of users for each type, with Admins having 14 users, Moderators having 30 users, Suspended users having 3, and Silenced users having 2.

This is an SQL version of the Dashboard Report for Users Per Type.

This report provides a count of users by specific roles and statuses within a Discourse community. It categorizes users into four distinct groups: Admins, Moderators, Suspended, and Silenced users. The purpose of this report is to give community managers a quick overview of the distribution of user types and those with restricted access due to suspension or silencing.

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 Query Explanation

  • The query creates a derived table data with three columns: “Type”, “Count”, and a ranking column rk to ensure the final results are ordered logically (Admins, Moderators, Suspended, Silenced).
  • For each user role or status (Admin, Moderator, Suspended, Silenced), a SELECT statement counts the number of users that match the criteria:
    • Admins are identified by admin = true.
    • Moderators are identified by moderator = true.
    • Suspended users are those with a suspended_till date that is in the future (suspended_till > current_date).
    • Silenced users are those with a silenced_till date that is in the future (silenced_till > current_date).
  • Each SELECT statement includes a hardcoded rank (rk) for ordering purposes.
  • The UNION operator is used to combine the results of the four SELECT statements into a single result set.
  • The outer SELECT statement then retrieves the “Type” and “Count” from the derived table and orders the results by the rk column.

Example Results

Type Count
Admin 14
Moderator 30
Suspended 3
Silenced 2
1 Like