사용자 유형별 대시보드 보고서의 SQL 버전입니다.
이 보고서는 Discourse 커뮤니티 내에서 특정 역할과 상태별 사용자 수를 제공합니다. 사용자는 관리자, 모더레이터, 정지, 침묵 사용자라는 네 가지 명확한 그룹으로 분류됩니다. 이 보고서의 목적은 커뮤니티 관리자가 사용자 유형의 분포 및 정지나 침묵으로 인해 접근이 제한된 사용자를 빠르게 파악할 수 있도록 하는 것입니다.
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 쿼리 설명
- 이 쿼리는 세 개의 열인 “Type”, “Count” 및 최종 결과가 논리적으로 정렬되도록(관리자, 모더레이터, 정지, 침묵) 하는 랭킹 열
rk를 가진 유도 테이블data를 생성합니다. - 각 사용자 역할 또는 상태(관리자, 모더레이터, 정지, 침묵)에 대해
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열 기준으로 결과를 정렬합니다.
결과 예시
| Type | Count |
|---|---|
| Admin | 14 |
| Moderator | 30 |
| Suspended | 3 |
| Silenced | 2 |