这道题目要求我们计算推荐内容准确的用户的平均评分。下面是这个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
    );