[英]SQL Query Averages
考虑以下电影数据库:
我正在尝试回答以下问题:
找出1980年之前发行的电影的平均评级与1980年之后发行的电影的平均评级之间的差。(请确保计算每部电影的平均评级,然后计算1980年之前的电影和之后的电影的平均评级。只是计算1980年之前和之后的总体平均评分。)
我写了以下内容:
SELECT Movie.title, avg(Rating.stars), Movie.year
FROM Movie
INNER JOIN Rating ON Movie.mID = Rating.mID
INNER JOIN Reviewer ON Reviewer.rID = Rating.rID
GROUP BY Rating.mID, Movie.year
ORDER BY year
这给出了每部电影的平均评分。 我是否需要写两个子查询来获取1980年前和之后的平均值差异?
不要认为使用case语句有任何问题。
SELECT
avg(case when movie.year <= 1980 then Rating.stars else null end) as 'pre-1980 average',
avg(case when movie.year > 1980 then Rating.stars else null end) as 'post-1980 average',
from ...
您可以从那里计算出差值...关键是在case语句中使用null,平均值不会将null计入值的总数(毕竟null不是0)。
编辑:您正在寻找对问题的单行回答吗? 摆脱选择和分组中的movie.title和movie.year列。 更接近于此:
SELECT
avg(case when movie.year <= 1980 then Rating.stars else null) -
avg(case when movie.year > 1980 then Rating.stars else null) as 'difference',
from ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.