概述: 在Mysql数据库中,我已经填充了一个表,我想填充另一个表,其中包含两个公共字段和三个已经填充的'聚合字段。表。我可以通过单独的查询来完成,但无法通过包含子查询的单个查询找到方法。
问题: SQLFIDDLE正如我在这个小提琴中分享了最小模式,我的最终目标是填充" company_value"表格中包含' total',' export_val'和' import_val'。源表是' company_products'哪个有'金额'柱。
我试图加入'条件上的三个查询(companyCode和trPeriod相同),其中所有三个查询都来自同一个表。并且,不幸的是我得到了着名的mysql错误[你的SQL语法错误....]。
在小提琴中,我尝试了一种制作聚合查询和连接的方法,以至少为目标表创建预期输出。我也尝试过与Mysqls PYTHON ORM Peewee相似的方法。仍然无法通过。
请原谅我作为SQL新手加入查询的经验不足的查询编写技巧。你们的帮助对我来说都很棒。 TIA
答案 0 :(得分:1)
更好的方法可能是条件聚合
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)