2016-04-01 12 views
0

私は、注文データベースからデータを取り出すために使用しているSQLクエリを持っています。私は2つのテーブルを照会し、UNION ALLを使用して結果を結合しています。ただし、UNION ALLは期待どおりに機能していないようです。ここで私が使用していたクエリされます。MySQL UNIONが正しく動作しないようです。

+=======+========+=======+ 
| year | cnt | total | 
+=======+========+=======+ 
| 2016 | 200 | 1000 | 
| 2016 | 50 | 200 | 
| 2015 | 100 | 800 | 
| 2015 | 10 | 50 | 
+=======+========+=======+ 

しかし、これは私が取得したいものです::

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 | 250 | 1200 | 
| 2015 | 110 | 850 | 
+=======+========+=======+ 

誰かが言うことができます私は何をやっているのですか?

メモ: oc_orderテーブルのdate_addedカラムはdatetimeですが、oc_return_customのdate_addedカラムはテキストのみです。

答えて

2

UNION ALLは、別々のGROUP BYによって生成された2つのデータセットを単純に入れます。

あなたはサブクエリでクエリをラップし、追加GROUP BYを適用する必要が予想される結果セットを取得するには、次の

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

を私はUNIONのドキュメントに、おそらく3回準備ができて、私はちょうどこれを実現することができませんでした。私はサブクエリを使ってみましたが、何か間違っていたと思います! Ευχαριστώ!!! –

関連する問題