概述:
在Mysql数据库中,我已经填充了一个表,并且我想用“已填充”表中的两个公共字段和三个聚合字段来填充另一个表。我可以通过单独的查询来做到这一点,但是找不到由子查询组成的单个查询来做到这一点。
问题:
SQLFIDDLE由于我在此小提琴中共享了最小模式,因此我的最终目标是填充“ company_value”表,该表具有诸如“ total”,“ export_val”和“ import_val”的字段。源表是“ company_products”,其中具有“金额”列。
我试图在所有三个查询都来自同一表的条件下(公司代码和trPeriod相同)执行“联接”三个查询。而且,不幸的是,我收到了著名的mysql错误[您的SQL语法有错误...。]。
在小提琴中,我尝试了一种进行汇总查询并联接以至少为目标表创建预期输出的方法。我也尝试过与Mysqls PYTHON ORM Peewee类似的方法。仍然无法通过。
请原谅我缺乏经验的查询编写技能,以将连接查询作为SQL的新手。你们的任何帮助对我来说都是很大的。
TIA
最佳答案
更好的方法可能是条件聚合
select companycode,trperiod,
sum(Case when exim = 'ex' then amount else 0 end) as exports,
sum(Case when exim = 'im' then amount else 0 end) as imports,
sum(amount) as Total
from company_products
group by companycode,trperiod;
结果
+-------------+----------+---------+---------+---------+
| companycode | trperiod | exports | imports | Total |
+-------------+----------+---------+---------+---------+
| abcd111 | 201801 | 559.00 | 0.00 | 559.00 |
| abcd111 | 201802 | 550.00 | 0.00 | 550.00 |
| abcd111 | 201803 | 507.00 | 0.00 | 507.00 |
| abcd112 | 201801 | 0.00 | 56.00 | 56.00 |
| abcd113 | 201801 | 0.00 | 110.00 | 110.00 |
| abcd114 | 201801 | 234.00 | 234.00 | 468.00 |
| abcd115 | 201801 | 765.00 | 765.00 | 1530.00 |
| abcd116 | 201801 | 321.00 | 321.00 | 642.00 |
+-------------+----------+---------+---------+---------+
8 rows in set (0.00 sec)