【问题标题】:SQL: How do I find which movie genre a user watched the most? (IMDb personal project)SQL:如何找到用户观看次数最多的电影类型? (IMDb 个人项目)
【发布时间】:2015-03-24 06:50:05
【问题描述】:

我目前正在处理一个个人项目,我需要一些帮助。这是场景:

我正在为我自己和一些朋友看过的所有电影创建一个数据库 (MS Access)。我们在 IMDb 上对我们所有的电影进行了评级,并使用导出功能来获取所有电影数据和我们的电影评级。我打算在Excel上做一些总结分析。我感兴趣的一件事是每个人观看的最常见的电影类型。以下是我目前的情况。请注意,“const”列是电影的唯一 ID。我还为每个人的收视率提供了单独的表格,以下表格是构成我们看过的所有电影组合的汇总表。

这是我的桌子:http://imgur.com/v5x9Dhg

我为每个流派分配了一个 ID,如下所示:http://imgur.com/aXdr9XI

这是一个表格,其中我为每个电影 ID 和一个独特的流派提供了单独的实例:http://imgur.com/N0wULo8

我想找到一种方法来统计每个人观看的所有类型。有什么建议吗?我很乐意提供您需要的任何其他信息!

谢谢!

【问题讨论】:

标签: sql ms-access imdb


【解决方案1】:

您需要至少有一个表格,其中每个 userconst(观看电影)各有一行。在 3 个示例表中,您没有发布任何内容显示谁观看了哪些电影,这是您解决问题所需的信息。你提到有“每个人的评级的单独表格”,所以我假设你有这些信息。不过,您需要将所有这些组合成一个名为 PERSON_MOVIE 或类似名称的表。

假设您的第二个表名为 GENRE,其列是 ID、流派。

假设您的第三个表名为 GENRE_MOVIE,其列是 Const 和 ID(ID 对应于 GENRE 表上的 ID)

假设您没有发布但必需的第四个表称为PERSON_MOVIE,它的列是人员、常量、评级。

然后您可以编写如下查询:

select vw1.*, ge.genre
  from (select um.person, gm.id as genre_id, count(*) as num_of_genre
          from user_movie um
         inner join genre_movie gm
            on um.const = gm.const
         group by um.person, gm.id) vw1
 inner join (select person, max(num_of_genre) as high_count
               from (select um.person, gm.id, count(*) as num_of_genre
                       from user_movie um
                      inner join genre_movie gm
                         on um.const = gm.const
                      group by um.person, gm.id) x
              group by person) vw2
    on vw1.person = vw2.person
   and vw1.num_of_genre = vw2.high_count
 inner join genre ge
    on vw1.genre_id = ge.id

编辑回复:您的评论:

所以现在您有多个表格反映人们对电影的评分。您需要将它们组合到一个名为 PERSON_MOVIE 或类似名称的表中(如上例所示)。

表格上会有 3 列:person、const、rating

我不确定 access 是否支持传统的create table as select 查询,但通常您可以通过以下方式构造这样的表:

create table person_movie as
select 'Bob', const, [You rated]
from ratings_by_bob
union all
select 'Sally', const, [You rated]
from ratings_by_sally
union all
select 'Jack', const, [You rated]
from ratings_by_jack
....

如果没有,只需手动组合表格并添加第三列,如图所示,指示每行反映的用户。然后你就可以运行我的初始查询了。

【讨论】:

  • 非常感谢您的帮助!这是我目前为每个用户所拥有的图像。这是 Alex 数据的 sn-p:imgur.com/JMcfSiw
  • 您不应该有多张桌子,每张桌子都有一个人的评分。您应该有一个包含该信息的表格,并将人员反映为一列。因此,在您的图像中,您需要一个带有第三列的表格,在这些行上您会看到“Alex”。然后在其他行上,您会看到 Jack、Jill 等都在一张桌子上。在我发布的示例查询中,我假设您将创建的这个新表名为 PERSON_MOVIE,并且我假设它的列将是 personconstrating
  • 非常感谢您的帮助。这绝对是有道理的,我将开始着手进行这些更改!
猜你喜欢
  • 2011-12-05
  • 2016-03-11
  • 2019-02-07
  • 2012-07-26
  • 1970-01-01
  • 2012-10-04
  • 2018-07-21
  • 1970-01-01
  • 2016-10-21
相关资源
最近更新 更多