如何在Where子句中使用未识别的字符

时间:2016-09-19 22:26:37

标签: sql oracle

我有查询,我通过从租金金额中减去分配成本来计算利润。然后将此结果除以分配成本。通过乘以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';

3 个答案:

答案 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;
    `