이것은 신뢰 수준별 사용자 대시보드 보고서의 SQL 버전입니다.
이 보고서는 Discourse 커뮤니티 내에서 사용자 신뢰 수준의 분포에 대한 개요를 제공합니다.
SELECT
CASE
WHEN trust_level = 0 THEN 'newuser'
WHEN trust_level = 1 THEN 'basic'
WHEN trust_level = 2 THEN 'member'
WHEN trust_level = 3 THEN 'regular'
WHEN trust_level = 4 THEN 'leader'
ELSE 'unknow'
END,
COUNT(users)
FROM users
WHERE
id > 0
AND NOT EXISTS(
SELECT 1
FROM anonymous_users a
WHERE a.user_id = users.id
)
GROUP BY trust_level
ORDER BY trust_level
쿼리 분석
- SELECT CASE: 쿼리의 이 부분은
CASE문을 사용하여 각 신뢰 수준에 사람이 읽을 수 있는 이름을 부여합니다. 이는trust_level숫자 필드를 이해하기 쉽게 ‘newuser’, ‘basic’, ‘member’, ‘regular’, 'leader’와 같은 문자열로 변환합니다. - COUNT(users): 이 함수는 각 신뢰 수준 내의 사용자 수를 계산합니다.
- FROM users: 이 쿼리는 커뮤니티의 모든 사용자 계정을 포함하는
users테이블에서 데이터를 가져옵니다. - WHERE id > 0: 이 조건은 ID가 0 이하인 시스템 계정을 제외하고 실제 사용자만 고려되도록 합니다.
- AND NOT EXISTS: 이 서브쿼리는
anonymous_users테이블을 확인하여 익명으로 표시된 사용자를 필터링합니다. 사용자가anonymous_users테이블에 항목이 있으면 해당 사용자는 집계에서 제외됩니다. - GROUP BY trust_level: 이 절은 결과를 신뢰 수준별로 그룹화하여 각 수준별로 개수가 별도로 계산되도록 합니다.
- ORDER BY trust_level: 마지막으로, 결과는
trust_level필드를 기준으로 정렬되어 출력 값이 최저 수준(newuser)에서 최고 수준(leader)으로 정렬됩니다.
결과 예시
| case | count |
|---|---|
| newuser | 1235 |
| basic | 234 |
| member | 345 |
| regular | 56 |
| leader | 23 |