sql - 使用计算字段连接两个子查询
问题描述
我有两个表,其中包含有关两个小部件生产的信息。 Table1
看起来像这样:
表 2 如下所示:
我想计算每个小部件的平均产量并按国家/地区代码 (ADM0_A3) 显示,因此结果看起来像这样(不在此阶段担心丢失数据,例如 BWA 没有生产小部件1)
ADM0_A3 w1avg w2avg
DZA 50000 3450000
AGO 86000 40000
BWA blank 0
CMR 3500 blank
我正在使用的 MS ACCESS SQL 查询在这里:
SELECT Z.ccode, Z.ave_w1, A.ave_w2
FROM
(
SELECT X.ADM0_A3 as ccode, 0.02 * X.sum_w1 / X.n_w1 AS ave_w1
FROM
(
SELECT t1.ADM0_A3, SUM(t1.production) AS sum_w1, COUNT(t1.production) as n_w1
FROM Table1 t1
GROUP BY t1.ADM0_A3
) X
) Z
JOIN
(
SELECT Y.ADM0_A3, 0.025 * Y.sum_w2 / Y.n_w2 AS ave_w2
FROM
(
SELECT t2.ADM0_A3, SUM(t2.production) AS sum_w2, COUNT(t2.production) as n_w2
FROM Table2 t2
GROUP BY t2.ADM0_A3
) Y
) A
ON A.ADM0_A3 = Z.ccode
我检查了子查询,它们工作正常。但是,当我尝试加入查询时,我收到此错误消息"Syntax error in FROM clause"
。我认为解决方案相当简单,但我只是看不到它,因此不胜感激任何建议。提前致谢!
解决方案
您可以尝试这样做:
SELECT adm0_a3, MAX(w1avg) as w1avg, MAX(w2avg) as w2avg
FROM (SELECT t1.ADM0_A3, AVG(t1.production) * 0.02 as w1avg, NULL as w2avg
FROM Table1 as t1
GROUP BY t1.ADM0_A3
UNION ALL
SELECT t2.ADM0_A3, NULL, AVG(t2.production) * 0.02 as w1avg
FROM Table1 as t2
GROUP BY t2.ADM0_A3
) as t
GROUP BY adm0_a3;
我不确定是否所有版本的 MS Access 都支持UNION ALL
该FROM
子句。如果没有,您可以使用视图解决此问题。
推荐阅读
- jquery - jQuery中的HTML标签
- google-cloud-platform - 端点的缺失信息描述
- excel - excel中的反射测试 - 运行自动代码时遇到问题
- python-3.x - 熊猫排序 - 保持秩序的问题
- node.js - 反应/节点:多个重定向创建CORS错误
- xamarin.forms - Xamarin 表单绑定布局与 DataTemplateSelector
- powershell - 是否有检查文件夹名称是否与当前日期相同的功能?
- python - 需要帮助在 Python 中创建数字的科赫雪花
- ios - Firebase App Distribution 的开发者资料
- python - Python + CSV 文件:如何自动为对象创建唯一名称,并从特定单元格中提取数据