【问题标题】:SQL - Finding Users with Similar InterestsSQL - 寻找具有相似兴趣的用户
【发布时间】:2020-04-21 00:54:25
【问题描述】:

我正在为我遇到的问题寻求帮助。我已经完成了大部分的跑腿工作,但我似乎无法把最后一点做好。

我在这里添加了一个 SQL Fiddle 示例,以更好地展示我正在尝试做的事情:http://sqlfiddle.com/#!9/2955fb/38

我有 3 个表,一个只是简单的 users 表,另一个是电影列表,第三个是用户喜欢哪些电影的列表。

现在我创建了一个查询,它只返回匹配的行 - 例如,假设我是 user_id 1 (Dan),只返回与我喜欢相同电影的其他用户。这很好用,它返回人名以及与我匹配的电影 - 我的问题是我想要第三列,其中包含我与该用户匹配的电影总数。

在我给出的示例中,我和 Ash 共有 2 部电影,而我和 Sam 有 3 部。我希望能够按 user_id 分组(以删除重复项),然后按电影数量排序我们有共同点——如果这有意义吗?

我希望有人能帮助我,因为我花了好几个小时才走到这一步。如果我没有解释清楚,请告诉我,我会详细说明。

【问题讨论】:

    标签: mysql sql group-by count sql-order-by


    【解决方案1】:

    这里是DEMO

    group_concat 将为您提供与其他用户共有的所有电影,用逗号分隔

    count 将为您提供与该用户相同的许多电影。

    order bydesc 部分将排序结果,将最大值放在首位。

    SELECT users.username, group_concat(movies.name), count(movies.name)
    FROM user_fave_movies t1
    INNER JOIN user_fave_movies t2 ON (t2.movie_id = t1.movie_id) 
    INNER JOIN users ON users.user_id = t2.user_id
    INNER JOIN movies ON movies.id = t1.movie_id 
    WHERE t1.user_id = 1 
    AND t2.user_id <> 1
    group by users.username
    order by count(movies.name) desc
    

    【讨论】:

    • 是的 group_concat 对我来说也是新的,这个例子有效,但我不需要连接部分....但是就像我说的,这对我来说是新的,所以每天都是学习日,谢谢!
    • @DanWheeler,您说:“但我不需要连接部分....”但在您的问题中,您说“我的问题是我想要第三列,其中包含总体计数如何我和那个用户匹配了很多电影。”这意味着您还需要第二列。您将在第二列中有什么内容?
    • 其实回想一下我原来的项目,这个concat会很方便。最初我只需要计数 - 可能是我的措辞不佳。谢谢!
    【解决方案2】:

    如果我得到这个,你想要以下:

    SELECT users.username, COUNT(movies.name) as num_common
    FROM user_fave_movies t1
    INNER JOIN user_fave_movies t2 ON (t2.movie_id = t1.movie_id) 
    INNER JOIN users ON users.user_id = t2.user_id
    INNER JOIN movies ON movies.id = t1.movie_id 
    WHERE t1.user_id = 1 
    AND t2.user_id <> 1
    GROUP BY users.username
    ORDER BY num_common DESC;
    

    结果:http://sqlfiddle.com/#!9/2955fb/43

    username    num_common
    Sam         3
    Ash         2
    

    所以你很接近,我补充的是:

    • GROUP BY:按用户分组
    • COUNT:电影数量
    • 订购

    【讨论】:

    • 是的,这很好用......我觉得有点傻,现在看起来这么简单。也许我需要一杯咖啡!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2011-03-29
    相关资源
    最近更新 更多