我有两张桌子
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:缺少表达
答案 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
)
在早期版本中,您可以使用RANK
或DENSE_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