【发布时间】:2015-04-16 22:08:45
【问题描述】:
我想找出某个年龄段(例如 20-30 岁)最流行的电影类型。我对 SQL 很陌生,如果我能得到任何帮助,我将不胜感激,如果这太小了,我们深表歉意。
此查询的相关表是:
FILM {FID (PK), ..., Film_Title}
MEMBER {MID (PK), ..., Date_of_Birth}
LIST {MID (FK), FID (FK)}
GENRE {GID (PK), Genre}
FILM_ACTOR_DIRECTOR_GENRE {FID (FK), ..., GID (FK)}
FILM 和 MEMBER 表应该是不言自明的,而 LIST 是 MEMBER 希望租借的电影的选择。它就像一个购物篮。每个成员只有一个列表,每个列表可以包含多部电影。 FILM_ACTOR_DIRECTOR_GENRE 包含属于每部电影的流派。每部电影只能有一种类型。
到目前为止,我已经设法得到一个显示:
Genre # People Aged 20-30
------- -------------------
Action 5
Comedy 4
Horror 2
etc. etc.
但是,它涉及创建一个表,然后运行另一个查询。有没有一种方法可以在不运行 2 次单独查询的情况下获得特定年龄段中最受欢迎的类型?
我使用的两个查询是:
SELECT DISTINCT Genre.Genre_Name, Member.Date_of_Birth
INTO Genre_by_Age
FROM
((((Genre
INNER JOIN Film_Actor_Director_Genre ON Genre.GID = Film_Actor_Director_Genre.GID)
INNER JOIN Film ON Film_Actor_Director_Genre.FID = Film.FID)
INNER JOIN List ON Film.FID = List.FID)
INNER JOIN Member ON Member.MID = List.MID)
WHERE (((Member.[Date_of_Birth]) Between #4/16/1995# And #4/16/1985#));
使用我想要的信息创建新表,并且:
SELECT Genre_Name, COUNT(*) as Number_of_People_aged_20_to_30
FROM Genre_by_Age
GROUP BY Genre_Name
ORDER BY COUNT(*) DESC;
获得如上所示的输出。
有没有办法在不运行 2 个单独的查询的情况下获得上述结果?感谢您的宝贵时间!
【问题讨论】:
标签: sql ms-access multiple-tables