这道题目要求我们计算推荐内容准确的用户的平均评分。下面是这个SQL查询的思路和实现步骤。
1. 确定总体问题
我们需要找出推荐内容准确的用户,并计算这些用户的平均评分。准确的定义是推荐的内容标签与用户喜好标签一致。我们需要从两个表中提取数据,计算符合条件的用户的平均评分,并保留三位小数。
2. 分析关键问题
- 识别准确推荐:找出推荐内容标签与用户喜好标签一致的用户。
- 计算平均评分:对这些用户的评分求平均值,并保留三位小数。
3. 解决每个关键问题的代码及讲解
步骤1:识别准确推荐
我们使用子查询来找出推荐内容标签与用户喜好标签一致的用户:
SELECT DISTINCT rec.rec_user
FROM recommend_tb rec
JOIN user_action_tb ua_inner ON rec.rec_user = ua_inner.user_id
WHERE rec.rec_info_l = ua_inner.hobby_l
JOIN user_action_tb ua_inner ON rec.rec_user = ua_inner.user_id
:通过用户ID连接两个表。WHERE rec.rec_info_l = ua_inner.hobby_l
:过滤出推荐内容标签与用户喜好标签一致的记录。SELECT DISTINCT rec.rec_user
:选择符合条件的用户ID,并去重。
步骤2:计算平均评分
我们使用主查询来计算这些用户的平均评分:
SELECT
ROUND(AVG(ua.score), 3) AS avg_score
FROM
user_action_tb ua
WHERE
ua.user_id IN (
-- 子查询
)
AVG(ua.score)
:计算符合条件用户的平均评分。ROUND(..., 3)
:将结果四舍五入保留三位小数。WHERE ua.user_id IN (...)
:使用子查询结果过滤出符合条件的用户。
完整代码
SELECT
ROUND(AVG(ua.score), 3) AS avg_score
FROM
user_action_tb ua
WHERE
ua.user_id IN (
SELECT DISTINCT rec.rec_user
FROM recommend_tb rec
JOIN user_action_tb ua_inner ON rec.rec_user = ua_inner.user_id
WHERE rec.rec_info_l = ua_inner.hobby_l
);