此为“被忽略/静音用户排行榜”的 SQL 版本仪表板报告。
此仪表板报告为管理员提供了平台成员在指定开始和结束日期之间忽略或静音了哪些用户的相关见解。被忽略的用户是指被某成员选择性屏蔽,使其帖子对该成员不可见的用户,而静音用户是指某成员选择不接收其通知的用户。
此报告可以识别在社区中引起摩擦的用户,或其行为导致他人不愿与其互动的用户。该报告有助于做出审核决策,例如联系经常被忽略或静音的用户以解决其行为问题,或更广泛地了解社区中需要关注的问题。
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2025-01-01
WITH ignored_users AS (
SELECT
ignored_user_id AS user_id,
COUNT(*) AS ignores_count
FROM ignored_users
WHERE created_at >= :start_date
AND created_at <= :end_date
GROUP BY ignored_user_id
ORDER BY COUNT(*) DESC
),
muted_users AS (
SELECT
muted_user_id AS user_id,
COUNT(*) AS mutes_count
FROM muted_users
WHERE created_at >= :start_date
AND created_at <= :end_date
GROUP BY muted_user_id
ORDER BY COUNT(*) DESC
)
SELECT
u.id AS user_id,
u.username AS username,
ig.ignores_count AS ignores_count,
COALESCE(mu.mutes_count, 0) AS mutes_count,
ig.ignores_count + COALESCE(mu.mutes_count, 0) AS total
FROM users AS u
JOIN ignored_users AS ig ON ig.user_id = u.id
LEFT OUTER JOIN muted_users AS mu ON mu.user_id = u.id
ORDER BY total DESC
SQL 查询说明
此 SQL 查询分几个步骤进行:
- 日期参数:
- 查询接受两个参数:
:start_date和:end_date,它们定义了报告的日期范围。两个日期参数均接受YYYY-MM-DD格式的日期。
- 查询接受两个参数:
- 公共表表达式 (CTE):
ignored_usersCTE 选择ignored_user_id并计算该 ID 在ignored_users表中出现的次数(表示该用户被忽略的次数),并将结果筛选在:start_date和:end_date之间。muted_usersCTE 类似,但从muted_users表中选择muted_user_id,并在日期过滤器内计算实例数。
- 主 SELECT 语句:从
users表中选择用户详细信息,以及来自ignored_users和muted_usersCTE 的计数。ignores_count直接来自ignored_usersCTE。mutes_count来自muted_usersCTE,但如果为NULL(表示用户未被静音),则使用COALESCE函数将其替换为 0。- 通过将忽略数和静音数相加来计算总数。
- JOIN:主查询利用
JOIN连接ignored_users以包含至少被忽略一次的所有用户,并利用LEFT OUTER JOIN连接muted_users以包含可能未被静音的用户。 - ORDER BY:报告按总忽略数和静音数降序排序,将“问题”用户排在报告顶部。
示例结果
| user | username | ignores_count | mutes_count | total |
|---|---|---|---|---|
| user1 | user1 | 4 | 1 | 5 |
| user2 | user2 | 3 | 0 | 3 |
| user3 | user3 | 1 | 2 | 3 |