繁体   English   中英

SQL查询平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM