首页 > 解决方案 > SQL分组不会导致平均

问题描述

我正在尝试在 SQLite 上解决这个练习问题。

找出 1980 年之前发行的电影的平均评分与 1980 年之后发行的电影的平均评分之间的差异。(确保计算每部电影的平均评分,然后计算 1980 年之前和之后电影的平均值。不要t 只计算 1980 年前后的总体平均评分

数据在这里

这是我到目前为止得到的(第一组<1980):

select title, avg(stars) from Movie join Rating
on Movie.mID=Rating.mID
where Year<1980
group by title

有人可以提供一个简单的解决方案吗?我不知道如何继续前进。

标签: sqlsqlite

解决方案


首先,不要按title. 区分电影的是id,而不是标题(理论上可以重复)。

您可以使用条件聚合:

select m.mID, avg(case when m.year < 1980 then r.stars end) as pre_1980_avg,
       avg(case when m.year > 1980 then r.stars end) as post_1980_avg
from Movie m join
     Rating r
     on m.mID = r.mID
group by m.mID;

推荐阅读