【问题标题】:SQL for simple recommender system用于简单推荐系统的 SQL
【发布时间】:2018-08-24 15:33:29
【问题描述】:

movies 表中的每条记录都有:

用户 - 用户 ID
电影 - 电影 ID
评级 - 用户对电影的评分

用户 1 想要接收来自用户组 2、3、4、5、6、7 的推荐(电影列表)。
推荐的电影不应该出现在用户 1 的电影中,并且在组内的平均评分不低于 3。同时,不推荐团内3人以下观看的电影。

这是我的选择,但它不反映最后一个要求:

SELECT t2.movie
FROM movies t1 INNER JOIN movies t2
     ON t1.user = 1
     AND t2.user IN(2,3,4,5,6,7)
     AND t2.movie NOT IN ( SELECT movie
                           FROM movies
                           WHERE user = 1 )
GROUP BY(t2.movie)
HAVING AVG(t2.rating)>=3

【问题讨论】:

    标签: sql


    【解决方案1】:

    这不行吗?

    SELECT t2.movie
    FROM movies t1 INNER JOIN movies t2
         ON t1.user = 1
         AND t2.user IN(2,3,4,5,6,7)
         AND t2.movie NOT IN ( SELECT movie
                               FROM movies
                               WHERE user = 1 )
    GROUP BY(t2.movie)
    HAVING AVG(t2.rating)>=3 
    AND  COUNT(DISTINCT t2.user) >= 3
    

    【讨论】:

    • 非常感谢,我的错误是 - 我尝试在分组之前添加相同的“COUNT(DISTINCT t2.user) >= 3”。
    【解决方案2】:
    SELECT t2.movie
    FROM movies t1 INNER JOIN movies t2
        ON t1.user = 1
           AND t2.user IN(2,3,4,5,6,7)
           AND t2.movie NOT IN ( SELECT movie
                                 FROM movies
                                WHERE user = 1 )
    WHERE (select count(distinct t3.user) from movies t3 
             where t3.movie = t2.movie) >= 3
    GROUP BY(t2.movie)
    HAVING AVG(t2.rating)>=3
    

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 2020-11-09
      相关资源
      最近更新 更多