我有两张桌子
ProdCos
ProdID ProdName ProdAddress ProdCity ST ProdZIP ProdPhone
和
电影
MovID MovTitle体裁RelDate DirLName DirFName Rtime ProdID
我需要列出制作公司(ProdNamd)的电影(ProdID)的最高开幕周末毛/预算比率。
到目前为止,我已经:
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:缺少表达式
发布于 2017-06-16 15:47:24
此错误与select语句中的表达式有关:
MAX(SELECT SUM(m.OpWkEnd / m.Budget) AS "Ratio" )
您没有指定要从哪个表中进行选择;而且,sum是一个agrigate函数,因此您不需要选择它的max,因为您没有对特定的SELECT语句进行分组。
但是,您甚至不需要选择任何内容,因为您已经在从表中提取数据。您可以直接选择这两个字段的和。
请参阅此查询;我只调整了所选内容中的一个比率列:
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发布于 2017-06-16 20:30:11
直截了当的方法是:找到比例最高的电影。然后找到相关的生产公司/公司。对于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
);发布于 2017-06-20 12:53:07
我可以用:
选择p.ProdName,p.ProdID,m.ProdID,(SUM(m.OpWkEnd) /SUM(m.Budget))作为“比率”,从电影m,ProdCos p中选择p.ProdID = m.ProdID,ROWNUM=1组按p.ProdName,p.ProdID,m.ProdID ORDER BY (SUM(m.OpWkEnd) /SUM(m.Budget)) DESC;
返回:
PR比率
阿特拉斯娱乐10 10 .692962893
https://stackoverflow.com/questions/44593076
复制相似问题