SQL:如何根据第三列的值减去AVG

时间:2016-02-23 18:52:20

标签: mysql union

我希望根据第三列的值得出两个平均值的差异。

我使用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;

[注意:我开始时有一个表,其中有许多重复的标题,每个标题都有不同的评级(星级)和年份。)

1 个答案:

答案 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?我把第二部分放了。