首页 > 解决方案 > 如何平均聚合列

问题描述

如何编写一个平均聚合(另一个平均值)的查询?

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

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

标签: sql

解决方案


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

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;

推荐阅读