我希望根据第三列的值得出两个平均值的差异。
我使用UNION从两个表中创建一个表,其中一个表的每个电影(标题)的平均评级(avgstars),其年份在1980年之前,另一个表在1980年之后。
title avgstars year
m1 3 pre1980
m2 4.5 pre1980
m3 2.5 pre1980
m4 4 post1980
m5 2.5 post1980
m6 3.333 post1980
如何从pre1980值(3.333-3.277)中减去post1980值?
我在下面写的代码返回:
year avg(foo.avgstars)
pre1980 3.33333333
post1980 3.27776667
SELECT year, AVG(foo.avgstars)
FROM
(SELECT title, AVG(stars) AS avgstars, 'pre1980' AS year
FROM Movie JOIN Rating USING (mID)
WHERE year < 1980
GROUP BY title
UNION
SELECT title, AVG(stars) AS avgstars, 'post1980' AS year
FROM Movie JOIN Rating USING (mID)
WHERE year > 1980
GROUP BY title) AS foo
GROUP BY year DESC;
[注意:我开始时有一个表,其中有许多重复的标题,每个标题都有不同的评级(星级)和年份。)
答案 0 :(得分:2)
对AVG使用条件,如果不匹配将返回NULL并且不会成为计算的一部分。
SELECT AVG( CASE WHEN year < 1980 THEN foo.avgstars END)
- AVG( CASE WHEN year >= 1980 THEN foo.avgstars END)
FROM Movie JOIN Rating USING (mID)
year = 1980
?我把第二部分放了。