如何平均汇总列

时间:2019-04-10 16:44:59

标签: sql

我该如何写一个查询汇总的平均值(另一个平均值)?

这是我到目前为止所拥有的。

SELECT AVG(stars)
FROM Rating
WHERE mID IN
    (SELECT mID
    FROM Movie
    WHERE year > 1980)
GROUP BY mID

我想对该查询的输出求平均值。

基础数据是:

(Stars,mID)

(2,104)
(3,104)
(3,107)
(5,107)
(4,108)
(2,108)
(4,108)

我可以通过上述查询获得按mID分组的平均值。

[AVG(stars),mID]

(2.50,104)
(4.00,107)
(3.33,108)

现在我要平均(2.5 + 4.0 + 3.33)

预期答案= 3.2767

2 个答案:

答案 0 :(得分:1)

您可以获得以下所有评分的总体平均值:

SELECT AVG(stars)
FROM Rating
WHERE mID IN (SELECT mID FROM Movie WHERE year > 1980);

但是您可能希望每部电影都具有相同的权重。为此,我们需要一个子查询:

SELECT AVG(avg_stars)
FROM (SELECT AVG(stars) as avg_stars
      FROM Rating
      WHERE mID IN (SELECT mID FROM Movie WHERE year > 1980);
      GROUP BY mID
     ) r;

答案 1 :(得分:0)

您可以将第一个resul用作主avg的FROM(子查询)

select avg(my_avg)
from  (
  SELECT AVG(stars) my_avg 
  FROM Rating r 
  INNER JOIN (
      SELECT mID
      FROM Movie
      WHERE year > 1980 
  ) t on t.mID  = r.mID
  GROUP BY mID
) t2