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
解决方案
您可以获得所有评分的总体平均值,如下所示:
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;
推荐阅读
- java - 使用流 api 聚合列表
- javascript - 循环遍历对象并返回特定属性的值
- python - Pandas - 循环设置WithCopyWarning
- javascript - 如何使用 ffmpeg 创建多质量视频流系统?
- powershell - Powershell AzureAD 脚本将组从静态更改为动态
- python-3.x - CDK 如何在使用 from_role_arn 从现有角色创建角色时添加承担角色
- r - 在 R 中绘制主题建模的时间序列
- javascript - 检查对象数组是否包含与其他对象数组中的对象具有多个值相同的对象
- javascript - 使用 React Hooks 自动调整 iframe 的高度
- html - 如果链接到网站外部,则链接到具有 ID 的元素不起作用