MySQL联盟似乎无法正常工作
我有一个SQL查询,用于从orders数据库中提取数据。我正在查询两个表,并使用UNIONALL组合结果。然而,工会似乎并没有像预期的那样发挥作用。以下是我正在使用的查询: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
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次,但我没有意识到这一点。我尝试使用子查询,但我猜我做错了什么!Ευχαριστώ!!!