如何对 MySQL 中的 UNION 查询中的多个字段求和?

How to sum multiple fields from a UNION Query in MySQL?

我目前正在学习如何在查询中使用 MySQL,但我进退两难。

目前,我有 2 个从多个表中获取数据的查询。两个查询都包含相同数量的列字段和字段名称。

为简单起见,查询的输出如下所示:

查询一:

   FieldOne| FieldTwo | FieldThree | CountOne | CountTwo | CountThree 
    data1  |  data11  |  data111   |    3     |     0    |      0
    data2  |  data22  |  data222   |    0     |     1    |      0
    data3  |  data33  |  data333   |    0     |     0    |      2
    data4  |  data44  |  data444   |    0     |     4    |      0
    data5  |  data55  |  data444   |    0     |     0    |      1

查询二:

   FieldOne| FieldTwo | FieldThree | CountOne | CountTwo | CountThree 
    data1  |  data11  |  data111   |    1     |     0    |      0
    data1  |  data11  |  data111   |    0     |     0    |      2
    data6  |  data66  |  data666   |    0     |     5    |      0

两个查询都包含相同的 FieldOne-FieldThree 数据,但可能包含不同的 CountOne-CountThree 值。

永远不会出现数据将包含所有 3 个字段 CountOne, CountTwo, CountThree 中的值的情况,但只会在这 3 个字段中的 ONE 中包含值。

我想做的是创建一个单独的 UNION QUERY,它具有以下输出:

   FieldOne| FieldTwo | FieldThree | CountOne | CountTwo | CountThree 
    data1  |  data11  |  data111   |    4     |     0    |      0
    data1  |  data11  |  data111   |    0     |     0    |      2
    data2  |  data22  |  data222   |    0     |     1    |      0
    data3  |  data33  |  data333   |    0     |     0    |      2
    data4  |  data44  |  data444   |    0     |     4    |      0
    data5  |  data55  |  data444   |    0     |     0    |      1
    data6  |  data66  |  data666   |    0     |     5    |      0

基本上,如果在FieldOne中有多个相同数据的实例,并且在相同的CountOneCountTwo或[=21=中有一个值] 对于同一数据的多个实例,我想获取该字段的 SUM 并将该数据按 FieldOne.

分组

但是,如果同一数据有多个实例,但它在不同的 Count 字段中包含一个值,则查询应为其创建单独的记录,如示例所示, data1 包含 CountOneCountTwo 字段中的值。

我在 Access 2013 的 SQL View 中用 UNION QUERY:

做了类似的事情
SELECT *
FROM [QueryOne]
ORDER BY FieldOne
UNION SELECT *
FROM [QueryTwo]
ORDER BY FieldTwo;

但是,由于我的知识有限,我一直在研究如何一次性将我想要的内容合并到上面的代码中,而不是创建另一个单独的查询。

您可以根据联合

的结果将 select 与求和和分组依据结合使用
select  FieldOne
    , FieldTwo 
    , FieldThree 
    , sum(CountOne )
    , sum(CountTwo )
    , sum(CountThree )
from ( 
          Select FieldOne
          , FieldTwo 
          , FieldThree 
          , CountOne 
          , CountTwo 
          , CountThree 
      FROM my_view1
      UNION ALL
      Select FieldOne
          , FieldTwo 
          , FieldThree 
          , CountOne 
          , CountTwo 
          , CountThree 
      FROM my_view2
  ) T 
group by  FieldOne
    , FieldTwo 
    , FieldThree 
order by FieldOne

如果你想合并不同的值,你可以使用 UNION,如果你想合并所有结果,可以使用 UNION ALL select ..

并做你的 "bit confusion " 关于在 union subselect

中查询的使用
select  FieldOne
    , FieldTwo 
    , FieldThree 
    , sum(CountOne )
    , sum(CountTwo )
    , sum(CountThree )
from ( 
          Select FieldOne
          , FieldTwo 
          , FieldThree 
          , CountOne 
          , CountTwo 
          , CountThree 
      FROM ( select col1 as FieldOne, col2 as FieldTwo .....
             from   ...  
             where 

         ) TT_A
      UNION ALL
      Select FieldOne
          , FieldTwo 
          , FieldThree 
          , CountOne 
          , CountTwo 
          , CountThree 
      FROM ( select col1 as FieldOne, col2 as FieldTwo .....
             from   ...  
             where 

         ) TT_B
  ) T 
group by  FieldOne
    , FieldTwo 
    , FieldThree 
order by FieldOne