如何从MySQL中的UNION查询中汇总多个字段?

时间:2018-03-25 06:42:16

标签: mysql ms-access-2013

我目前正在学习如何在查询中使用MySQL,而且我处于两难境地。

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

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

QueryOne:

   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

QueryTwo:

   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中有相同数据的多个实例,并且同一CountOneCountTwoCountThree中有一个值我希望得到该字段的 SUM 并按FieldOne对该数据进行分组。

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

我在Access 2013的CountTwo中使用SQL View

执行了类似的操作
UNION QUERY

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

1 个答案:

答案 0 :(得分:2)

您可以根据union

的结果使用带和和的分组
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。

并做你的" 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