我需要写一个查询:
找出 1980 年之前发行的电影的平均收视率与 1980 年之后发行的电影的平均收视率之间的差异。(确保计算每部电影的平均收视率,然后计算 1980 年之前和之后电影的平均收视率。不要' t 只计算 1980 年前后的总体平均评分。)
架构如下:
Movie ( mID, title, year, director )
English: There is a movie with
ID number mID, a title, a release year, and a director.
Reviewer ( rID, name )
English: The reviewer with ID number rID has a certain name.
Rating ( rID, mID, stars, ratingDate )
English: The reviewer rID gave the movie mID a
number of stars rating (1-5) on a certain ratingDate.
以下是我提出的查询。结果是正确的,但绝对不是一个很好的查询:
select t1.p1-t2.p2 from
(select avg(average) as p1 from
(select g.mid,g.average, year from
(select mid, avg(stars) as average from rating
group by mid) g, movie
where g.mid=movie.mid) j
where year >= 1980) t1,
(select avg(average) as p2 from
(select g.mid,g.average, year from
(select mid, avg(stars) as average from rating
group by mid) g, movie
where g.mid=movie.mid) j
where year < 1980) t2;
以下是我如何得出这个查询。首先,我编写了这个子查询来检索电影 id、该电影的平均评分、电影年份:
select g.mid,g.average, year from
(select mid, avg(stars) as average from rating
group by mid) g, movie
where g.mid=movie.mid
现在我需要使用相同的子查询来创建两个表,其中第一个表包含 1980 年之后电影的平均评分。第二个表包含 1980 年之前电影的平均评分。在顶级查询中,我减去这两个值。
问题是我在两个地方复制了相同的代码。您能否从代码重复和性能的角度帮助优化代码?