仪表盘报告 - 获赞最多的用户

这是“收到的点赞数最多的用户”仪表板报告的 SQL 版本。

此仪表板报告按收到的点赞数显示网站上的顶级用户。该报告通过计算特定时期内收到的点赞数来帮助管理员识别高度参与的用户,从而有助于识别活跃会员、评估内容质量、监控用户参与趋势,并做出明智的社区管理决策,例如选择版主。

--[params]
--date :start_date = 2024-01-01
--date :end_date = 2025-01-01

SELECT
ua.user_id AS user_id,
u.username as username,
COUNT(*) likes_received
FROM user_actions ua
INNER JOIN users u on ua.user_id = u.id
WHERE ua.created_at::date BETWEEN :start_date AND :end_date
AND ua.action_type = 2
GROUP BY ua.user_id, u.username, u.uploaded_avatar_id
ORDER BY likes_received DESC

SQL 查询说明

查询工作原理如下:

  • 日期参数:查询接受两个参数 :start_date:end_date,它们定义了报告的日期范围。两个日期参数都接受 YYYY-MM-DD 格式的日期。
  • 数据选择:查询从 user_actions 表 (ua) 和 users 表 (u) 中选择用户 ID 和用户名,这两个表使用 SQL 的 INNER JOIN 命令连接,条件是 ua.user_id 匹配 u.id
  • 过滤数据WHERE 子句用于过滤指定日期范围内的操作,并且仅考虑 was_liked 类型(由 action_type = 2 表示)的操作。
  • 聚合COUNT(*) 函数与 GROUP BY 子句结合使用,按 user_idusernameuploaded_avatar_id 对结果进行分组,并计算每个用户收到的点赞数。
  • 排序结果ORDER BY 子句然后根据 likes_received 以降序对聚合数据进行排序,以便收到的点赞数最多的用户排在报告的顶部。

查询会生成一个用户列表以及他们在给定日期范围内收到的点赞数,并按从高到低的顺序排序。

示例结果

user username likes_received
user1 user1 748
user2 user2 324
user3 user3 308
2 个赞