SQL电影数据库查询

时间:2012-11-08 11:24:37

标签: sql oracle sqlplus

我在解决以下SQL请求时遇到问题:

  1. 给出比“sara allgood”更多电影中扮演过角色的演员的名字,以及曾参加过“戛纳电影节”的电影。另外,请提供电影名称。

  2. 获取1970年至1990年间制作的所有电影中获奖的电影百分比。

  3. 有几个表,但我假设只需要4个表: '电影','重拍','演员','awtypes'

    • '电影'属性:电影,电影名称,年份,导演,工作室,奖项

    • '重拍'属性:filmid,title,year,priorfilm,prioryear

    • 'casts'属性:filmid,filmname,actor,award(10)

    • 'awtypes'属性:奖励(10),组织(100),国家,口语(50),年度

    我有点不清楚如何在第一次查询中将奖项与'戛纳电影节'相匹配,因为奖励字段只有10个字符,这意味着它是对awtypes表的引用,但我不知道哪个字段在awtypes表中包含奖项的名称,我目前无法访问数据库,所以它是组织或口语。

    至于第二部分,我不知道如何计算百分比,但似乎应该使用工会操作员来解决1970年至1990年期间制作的电影以及获奖的电影(我不知道)知道如何为至少一个奖项设置条件。

1 个答案:

答案 0 :(得分:0)

一些提示,我希望他们帮助你!

  

给出比'sara更多电影中扮演过角色的演员的名字   allgood'和谁曾参与过赢得'戛纳电影'的电影   节'。另外,请给出电影名称。

根据您所说的属性,我会说您可以通过awtypes表获得正确的casts属性。它们都包含award(10)列。根据您的数据,我希望org(100)列包含提供奖品的组织内容,因此在这种情况下我会猜测cannes film festival内容。但你必须尝试一下,看看你得到了什么结果。不幸的是,在这种情况下,通常很难根据列名来猜测列的内容。

  

获取所有制作的电影中获奖的电影百分比   在1970年和1990年之间。

根据您问题中所述的信息,我会猜测award表中的films列包含一个布尔值,或说明电影是否赢得奖励的内容。你必须试试这个。如果是这种情况,您可以在1970年到1990年之间的所有电影上使用COUNT(*),在所有电影COUNT(*)(或其他)上使用WHERE award = 1来获取总数。

您确实可以将计算查询中的这些与UNION组合在一起。可能对您有帮助的示例:

SELECT   SUM(cnt1) / SUM(cnt2) ... do the right computation here ...
FROM     ( SELECT  COUNT(*) AS cnt1
                   ,0 AS cnt2
           FROM    table1

           UNION ALL

           SELECT  0 AS cnt1
                   ,COUNT(*) AS cnt2
           FROM    table2) AS sub