这是“收到的点赞数最多的用户”仪表板报告的 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_id、username和uploaded_avatar_id对结果进行分组,并计算每个用户收到的点赞数。 - 排序结果:
ORDER BY子句然后根据likes_received以降序对聚合数据进行排序,以便收到的点赞数最多的用户排在报告的顶部。
查询会生成一个用户列表以及他们在给定日期范围内收到的点赞数,并按从高到低的顺序排序。
示例结果
| user | username | likes_received |
|---|---|---|
| user1 | user1 | 748 |
| user2 | user2 | 324 |
| user3 | user3 | 308 |
| … | … | … |