【问题标题】:How to sum multiple fields from a UNION Query in MySQL?如何从 MySQL 中的 UNION 查询中汇总多个字段?
【发布时间】:2018-03-25 06:42:15
【问题描述】:

我目前正在学习如何在查询中使用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 个字段中的 一个 中包含值。

我要做的是创建一个单独的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 字段中包含一个值,则查询应为其创建单独的记录,如示例中的data1 包含CountOneCountTwo 字段中的值。

我在 Access 2013 的 SQL View 中使用 UNION QUERY 做了类似的事情:

SELECT *
FROM [QueryOne]
ORDER BY FieldOne
UNION SELECT *
FROM [QueryTwo]
ORDER BY FieldTwo;

但是,以我有限的知识,我被困在如何将我想要的内容一次性合并到上述代码中,而不是创建另一个单独的查询。

【问题讨论】:

  • 我想您还希望输出中的 data2 的值?
  • @Nick 是的,错过了那个...问题已更新
  • Access 似乎是一个学习 MySQL 的陌生环境

标签: mysql ms-access-2013


【解决方案1】:

您可以根据联合的结果使用带有 sum 和 group by 的 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  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

【讨论】:

  • 不好意思问,但这一切都可以在Access的SQL View完成吗?
  • 为什么不......而不是 my_table1 和 my_table2 只是使用你的 view_name
  • @Andre ...正确..非常感谢..错误的复制和粘贴..答案已更新
  • 抱歉,我对来自my_table1my_table2SELECT 有点困惑......我的2 个查询每个都包含许多表,它们通过关系得到FieldOne, FieldTwo, FieldThree, CountOne, CountTwo, CountThree.. .如何在我的UNION QUERY 中使用它?....我不应该引用我的QueryOneQueryTwo 吗?
  • 答案已更新 .. 为您的子查询提供建议 .. 希望很明确 ..
猜你喜欢
  • 2010-09-26
  • 2020-11-20
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多