SQL:如何找到用户最常观看的电影类型? (IMDb个人项目)

时间:2015-01-25 19:05:36

标签: sql ms-access imdb

我目前正在开展个人项目,我可以使用一些帮助。这是场景:

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

这是我的表格:http://imgur.com/v5x9Dhg

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

这是一个表格,其中我为每个电影ID和一个独特的类型分别设置了实例:http://imgur.com/N0wULo8

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

因此,假设您的第二个表名为GENRE,其列为ID,类型。

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

假设您没有发布但需要的第四个表名为PERSON_MOVIE,其列为人,Const,等级。

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

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

我不确定访问是否支持传统的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
....

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