我有查询,我通过从租金金额中减去分配成本来计算利润。然后将此结果除以分配成本。通过乘以100将此值转换为百分比,然后将标题命名为" Profit%"。
如何生成所有利润低于100%的电影报道。包括电影的名称,返回的利润百分比(四舍五入到小数点后一位;标题利润%)和租用的次数(标题租用)。 我的工作是
SELECT Name,TO_CHAR(((Movie.RentalAmount -
DistributionCost)/DistributionCost)*100.00,'999.999') AS "Profit %",
COUNT(MovieRented.MOVIEID)
FROM Movie , MovieRented
WHERE Movie.MovieID = MovieRented.MovieID
AND 'Profit %' <= '100.00';
答案 0 :(得分:1)
您只需要再次计算where子句中的利润。
SELECT Name,TO_CHAR(((Movie.RentalAmount -
DistributionCost)/DistributionCost)*100.00,'999.999') AS "Profit %",
COUNT(MovieRented.MOVIEID)
FROM Movie , MovieRented
WHERE Movie.MovieID = MovieRented.MovieID
AND (Movie.RentalAmount - DistributionCost)/DistributionCost <= 100;
答案 1 :(得分:1)
首先:当你想要每部电影一个结果行时,然后按电影分组。
然后看'Profit %' <= '100.00'
。你在这里比较两个字符串。它应该是带有双引号的别名“Profit%”,您仍然可以比较字符串'20' > '100.00'
,因为'2' > '1'
。
然后,如果你想找到低于100的利润,你应该使用&lt;而不是&lt; =当然。
BTW:请使用正确的连接。逗号分隔的连接由于某种原因而被显式连接替换。select name, to_char(profitrate, '990D0') as "Profit %", rented
from
(
select
m.name,
((sum(m.rentalamount) - sum(mr.distributioncost)) / sum(mr.distributioncost)) * 100.0
as profitrate,
count(*) as rented
from movie m
join movierented mr on mr.movieid = m.movieid
group by m.movieid, m.name
)
where profitrate < 100;
答案 2 :(得分:0)
我相信当你在select查询中使用聚合函数时,你需要在查询中使用GROUP BY关键字。 您可以将其用作内联视图,并且可以对结果使用过滤条件,如下所示。
SELECT *
FROM (
SELECT Name,
TO_CHAR(((Movie.RentalAmount -
DistributionCost)/DistributionCost)*100.00,'999.999') AS "Profit %",
COUNT(MovieRented.MOVIEID)
FROM Movie ,
MovieRented
WHERE Movie.MovieID = MovieRented.MovieID
GROUP BY Name,
Movie.RentalAmount,
DistributionCost)
WHERE TO_NUMBER("Profit %") <= 100;
`