MySQL联盟似乎无法正常工作

MySQL联盟似乎无法正常工作,mysql,union,union-all,Mysql,Union,Union All,我有一个SQL查询,用于从orders数据库中提取数据。我正在查询两个表,并使用UNIONALL组合结果。然而,工会似乎并没有像预期的那样发挥作用。以下是我正在使用的查询: SELECT year(oc_order.date_added) AS year, COUNT(oc_order.order_id) as cnt, SUM( ifnull(oc_order.new_total,oc_order.total) ) as total FROM oc_order WHERE oc_order.o

我有一个SQL查询,用于从orders数据库中提取数据。我正在查询两个表,并使用UNIONALL组合结果。然而,工会似乎并没有像预期的那样发挥作用。以下是我正在使用的查询:

SELECT year(oc_order.date_added) AS year, COUNT(oc_order.order_id) as cnt, SUM( ifnull(oc_order.new_total,oc_order.total) ) as total
FROM oc_order
WHERE oc_order.order_status_id IN (1,3,5)
    AND MONTH(oc_order.date_added) BETWEEN '01' AND '02'
    AND DAY(oc_order.date_added) BETWEEN '01' AND '31'
GROUP BY year(oc_order.date_added)

UNION ALL

SELECT ifnull(year(str_to_date(oc_return_custom.date_added,'%d-%m-%Y %H:%i:%s')),year(str_to_date(oc_return_custom.date_added,'%Y-%m-%d %H:%i:%s')) ) AS year, COUNT(oc_return_custom.return_id) as cnt, SUM( oc_return_custom.total ) as total
FROM oc_return_custom
WHERE ifnull(MONTH(str_to_date(oc_return_custom.date_added,'%d-%m-%Y %H:%i:%s')),MONTH(str_to_date(oc_return_custom.date_added,'%Y-%m-%d %H:%i:%s')) ) BETWEEN '01' AND '02'
    AND ifnull(DAY(str_to_date(oc_return_custom.date_added,'%d-%m-%Y %H:%i:%s')),DAY(str_to_date(oc_return_custom.date_added,'%Y-%m-%d %H:%i:%s')) ) BETWEEN '01' AND '31'
GROUP BY ifnull(year(str_to_date(oc_return_custom.date_added,'%d-%m-%Y %H:%i:%s')),year(str_to_date(oc_return_custom.date_added,'%Y-%m-%d %H:%i:%s')) )
ORDER BY year DESC
这是我从查询中得到的结果:

+=======+========+=======+
| year  | cnt    | total |
+=======+========+=======+
| 2016  |  200   |  1000 |
| 2016  |   50   |   200 |
| 2015  |  100   |   800 |
| 2015  |   10   |    50 |
+=======+========+=======+
但这正是我想要的:

+=======+========+=======+
| year  | cnt    | total |
+=======+========+=======+
| 2016  |  250   |  1200 |
| 2015  |  110   |   850 |
+=======+========+=======+
有人能告诉我我做错了什么吗

注:
oc_order表的date_added列是datetime,而oc_return_custom的date_added列只是文本。

UNION ALL
只需将单独的
分组操作生成的两个数据集放在一起即可

要获得预期的结果集,您必须将查询包装在子查询中,并应用一个附加的
GROUP BY

SELECT year, SUM(cnt) AS cnt, SUM(total) AS total
FROM ( ... your query here ...) AS t
GROUP BY year

UNION ALL
只需将单独的
GROUP by
操作生成的两个数据集放在一起

要获得预期的结果集,您必须将查询包装在子查询中,并应用一个附加的
GROUP BY

SELECT year, SUM(cnt) AS cnt, SUM(total) AS total
FROM ( ... your query here ...) AS t
GROUP BY year

我准备了关于UNION的文档大概3次,但我没有意识到这一点。我尝试使用子查询,但我猜我做错了什么!Ευχαριστώ!!!我准备了关于UNION的文档大概3次,但我没有意识到这一点。我尝试使用子查询,但我猜我做错了什么!Ευχαριστώ!!!