列出具有最高开放周末总收入/预算比率的电影的制作公司信息

时间:2017-06-16 15:35:41

标签: sql oracle

我有两张桌子


ProdCos
ProdID ProdName ProdAddress ProdCity ST ProdZIP ProdPhone

电影
MovID MovTitle类型RelDate DirLName DirFName率预算OpWkEnd Rtime ProdID

我需要为电影(ProdID)列出制作公司(ProdNamd),其开幕周末总收入/预算比率最高。

到目前为止,我有:

    SELECT p.ProdName, p.ProdID, m.ProdID, MAX(SELECT SUM(m.OpWkEnd / m.Budget) AS "Ratio" )
    FROM Movies m, ProdCos p
    WHERE p.ProdID = m.ProdID
    GROUP BY p.Prodname, m.ProdID, p.ProdID; 

它返回:

  

ORA-00936:缺少表达

3 个答案:

答案 0 :(得分:2)

错误与您的select语句中的此表达式有关:

MAX(SELECT SUM(m.OpWkEnd / m.Budget) AS "Ratio" )

您没有指定要从哪个表中选择;另外,sum是一个agrigate功能,因此您不需要选择其max,因为您没有对该特定选择语句进行分组。

但是,您甚至不需要选择任何内容,因为您已经从表中提取数据。您可以直接选择这两个字段的总和。

查看此查询;我只在您的选择中调整了一个比率列:

SELECT 
    p.ProdName, p.ProdID, m.ProdID, 
    (SUM(m.OpWkEnd) / SUM(m.Budget)) AS "Ratio"
FROM 
    Movies m, ProdCos p 
WHERE
    p.ProdID = m.ProdID 
GROUP BY 
    p.Prodname, m.ProdID, p.ProdID

答案 1 :(得分:1)

直截了当的方法是:找到比例最高的电影。然后找相关的制作公司/公司。从Oracle 12c开始,这只是:

select *
from prodcos
where prodid in
(
  select prodid
  from movies
  order by opwkend / budget desc
  fetch first 1 row with ties
)

在早期版本中,您可以使用RANKDENSE_RANK来为电影排名:

select *
from prodcos
where (prodid, 1) in
(
  select prodid, rank() over (order by opwkend / budget desc) as rnk
  from movies
);

答案 2 :(得分:0)

我能够使用:

SELECT p.ProdName,p.ProdID,m.ProdID,(SUM(m.OpWkEnd)/SUM(m.Budget))AS“Ratio”      来自电影m,ProdCos p      在哪里p.ProdID = m.ProdID      AND ROWNUM = 1      GROUP BY p.ProdName,p.ProdID,m.ProdID      ORDER BY(SUM(m.OpWkEnd)/SUM(m.Budget))DESC;

返回了:

PRODNAME PR PR比率

Atlas Entertainment 10 10 .692962893