MySQL通过多个聚合查询同时从另一个表填充表

时间:2018-05-31 07:55:04

标签: mysql

概述: 在Mysql数据库中,我已经填充了一个表,我想填充另一个表,其中包含两个公共字段和三个已经填充的'聚合字段。表。我可以通过单独的查询来完成,但无法通过包含子查询的单个查询找到方法。

问题: SQLFIDDLE正如我在这个小提琴中分享了最小模式,我的最终目标是填充" company_value"表格中包含' total',' export_val'和' import_val'。源表是' company_products'哪个有'金额'柱。

我试图加入'条件上的三个查询(companyCode和trPeriod相同),其中所有三个查询都来自同一个表。并且,不幸的是我得到了着名的mysql错误[你的SQL语法错误....]。

在小提琴中,我尝试了一种制作聚合查询和连接的方法,以至少为目标表创建预期输出。我也尝试过与Mysqls PYTHON ORM Peewee相似的方法。仍然无法通过。

请原谅我作为SQL新手加入查询的经验不足的查询编写技巧。你们的帮助对我来说都很棒。 TIA

1 个答案:

答案 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)