我目前正在开展个人项目,我可以使用一些帮助。这是场景:
我正在为所有电影创建一个数据库(MS Access),我和一些朋友一直在观看。我们在IMDb上对所有电影进行了评分,并使用导出功能获取所有电影数据和我们的电影评级。我计划对Excel进行一些总结分析。我感兴趣的一件事是每个人观看的最常见的电影类型。以下是我目前的情况。请注意,“const”列是电影的唯一ID。我还为每个人的评分提供了单独的表格,下表是构成我们观看的所有电影组合的汇总表。
这是我的表格:http://imgur.com/v5x9Dhg
我为每个类型分配了一个ID,如下所示:http://imgur.com/aXdr9XI
这是一个表格,其中我为每个电影ID和一个独特的类型分别设置了实例:http://imgur.com/N0wULo8
我想找到一种方法来计算每个人观看的所有类型。有什么建议?我很乐意提供您需要的任何其他信息!
谢谢!
答案 0 :(得分:0)
您需要至少有一个表格,每个user
和const
有一行(观看电影)。在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
....
如果没有,只需手动组合表并添加第三列,如图所示,指示每行反映的用户。然后你可以运行我的初始查询。