如何对 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
中有多个相同数据的实例,并且在相同的CountOne
、CountTwo
或[=21=中有一个值] 对于同一数据的多个实例,我想获取该字段的 SUM 并将该数据按 FieldOne
.
分组
但是,如果同一数据有多个实例,但它在不同的 Count
字段中包含一个值,则查询应为其创建单独的记录,如示例所示, data1
包含 CountOne
和 CountTwo
字段中的值。
我在 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
我目前正在学习如何在查询中使用 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
中有多个相同数据的实例,并且在相同的CountOne
、CountTwo
或[=21=中有一个值] 对于同一数据的多个实例,我想获取该字段的 SUM 并将该数据按 FieldOne
.
但是,如果同一数据有多个实例,但它在不同的 Count
字段中包含一个值,则查询应为其创建单独的记录,如示例所示, data1
包含 CountOne
和 CountTwo
字段中的值。
我在 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