集团总从MySQL中的多个表

问题描述 投票:2回答:2

我想组2台基于前两列。我已经成功地做到了这一点和代码可以看到下面。我需要一些帮助,从每个表的总和其余列,并插入到我的输出表重命名列可以蜜蜂如下图所示。在输出的预测列是从MI_STAT_TOTAL表的结果和SALES列是从SALES_TOTAL表的结果。

表:MI_STAT_TOTAL

Planning_Hierarchy_2  Region_Description          Measure_Values
xx                    LATAM                        2   
yy                    ASPAC                        3
zz                    EMEA                         4
zz                    EMEA                         1
aa                    ASPAC                        1

表:SALES_TOTAL

Product_Number        Region                      Item_Values
xx                    LATAM                        1  
yy                    ASPAC                        2
zz                    EMEA                         2
zz                    EMEA                         1
bb                    USA                          2

预期产出表:P2_Region_Unique

Product_Number        Region                      Forecast       Sales
xx                    LATAM                        2             1
yy                    ASPAC                        3             2
zz                    EMEA                         5             3 
aa                    ASPAC                        1
bb                    USA                                        2

低于代码只考虑GROUP BY两个表,但不是SUM之间:

CREATE TABLE P2_Region_Unique (
  Product_Number VARCHAR(100),
  Region VARCHAR(13)
  );

INSERT INTO P2_Region_Unique
    SELECT s.Planning_Hierarchy_2 AS Product_Number, s.Region_Description` AS Region
    FROM MI_STAT_TOTAL s
    UNION
    SELECT m.`Product Number` AS `Product_Number`, m.`Region` AS Region
    FROM SALES_TOTAL m;

预期产出表的形式考虑也包括在SUM

CREATE TABLE P2_Region_Unique (
  `Product Number` VARCHAR(100),
  `Region` VARCHAR(13),
  `Forecast` DECIMAL (20,10),
  `Sales` DECIMAL (20,10)
  );
mysql sql
2个回答
1
投票

在MySQL中,你可以把qazxsw POI使用qazxsw POI的qazxsw POI。

您的样本数据表明,你正在处理一个N-M加盟。要做的第一件事是将聚集成子查询,如下所示:

SELECT

这会工作,但不会从该连接两端返回记录。对于这一点,你可以模拟FULL OUTER JOIN(其中,由@Nick指出,没有在MySQL支持)与联合在一起的查询,如:

INSERT

INSERT ... SELECT syntax运营商消除跨子查询重复。

INSERT INTO P2_Region_Unique SELECT s.product_number, s.region, f.forecast, s.sales FROM ( SELECT product_number, region, SUM(item_values) sales FROM SALES_TOTAL GROUP BY product_number, region ) s LEFT JOIN ( SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast FROM MI_STAT_TOTAL GROUP BY planning_hierarchy_2, region_description ) f ON f.product_number = s.product_number AND f.region = s.region GROUP BY s.product_number, s.region 收益率:

INSERT INTO P2_Region_Unique
SELECT s.product_number, s.region, f.forecast, s.sales
FROM
    (
        SELECT product_number, region, SUM(item_values) sales
        FROM SALES_TOTAL
        GROUP BY product_number, region
    ) s
    LEFT JOIN (
        SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
        FROM MI_STAT_TOTAL
        GROUP BY planning_hierarchy_2, region_description
    ) f ON f.product_number = s.product_number AND f.region = s.region
GROUP BY s.product_number, s.region
UNION
SELECT f.product_number, f.region, f.forecast, s.sales
FROM
    (
        SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
        FROM MI_STAT_TOTAL
        GROUP BY planning_hierarchy_2, region_description
    ) f
    LEFT JOIN (
        SELECT product_number, region, SUM(item_values) sales
        FROM SALES_TOTAL
        GROUP BY product_number, region
    ) s ON f.product_number = s.product_number AND f.region = s.region
GROUP BY f.product_number, f.region

0
投票

尝试这个

UNION

对于插入操作

demo on DB Fiddle

如果你的MySQL版本低于8的版本,则

| product_number | region | forecast | sales |
| -------------- | ------ | -------- | ----- |
| aa             | ASPAC  | 1        |       |
| bb             | USA    |          | 2     |
| xx             | LATAM  | 2        | 1     |
| yy             | ASPAC  | 3        | 2     |
| zz             | EMEA   | 5        | 3     |
© www.soinside.com 2019 - 2024. All rights reserved.