2016-10-30 11 views
0

これを数時間前に把握しようとしていて、本当に助けてくれてありがとう!2つのテーブルにジョインしてグループと合計を正しく設定する

だから私は2つのテーブル、トランザクションを持っていると

私のSELECTの目標は、参加/これらのテーブルを結合し、それらを日付ごとにグループ化され得ることであるtransactions_rebuy。

SELECT tr.SoldDate, SUM(tr.TotalAmount) as SumByReceipt, 
COUNT(DISTINCT(tr.`ForsNr`)) as TotalCustomers, rebuy.RebuySum 
FROM transactions tr 
CROSS JOIN (
SELECT SUM(TotalAmount) as RebuySum 
    FROM transactions_rebuy 
    WHERE SoldDate BETWEEN '2016-10-22' AND '2016-10-27' 
    ) as rebuy 
WHERE tr.SoldDate BETWEEN '2016-10-22' AND '2016-10-27' 
GROUP by tr.SoldDate 
ORDER by tr.SoldDate DESC 

私に次のような結果になります:

は、今のところ私はこの文を持っている

SaldDatum SumByReceipt TotalCustomers RebuySum 

2016-10-27 54855.8001  99  10435.9997 
2016-10-26 41749.8009  76  10435.9997 
2016-10-25 46626.8001  79  10435.9997 
2016-10-24 38678.8017  76  10435.9997 
2016-10-22 30351.9997  48  10435.9997 

問題は「RebuySum」欄は、上記のすべての日付の合計をグループ化されていることです。 "SumByReceipt"として、各行の合計ではなく、BY DATEでグループ化します。

私はグルーピングと合計を前後して試してみましたが、機能するようにしましたが、代わりに "SumByReceipt"列が崩れます。

これに関するアイデアには大変感謝しています。

答えて

0

サブクエリを日付別にグループ化し、日付に結合します。

SELECT tr.SoldDate, SUM(tr.TotalAmount) as SumByReceipt, 
     COUNT(DISTINCT(tr.`ForsNr`)) as TotalCustomers, IFNULL(rebuy.RebuySum, 0) RebuySum 
FROM transactions tr 
LEFT JOIN (
    SELECT SoldDate, SUM(TotalAmount) as RebuySum 
    FROM transactions_rebuy 
    WHERE SoldDate BETWEEN '2016-10-22' AND '2016-10-27' 
    GROUP BY SoldDate 
    ) as rebuy 
ON tr.SoldDate = rebuy.SoldDate 
WHERE tr.SoldDate BETWEEN '2016-10-22' AND '2016-10-27' 
GROUP by tr.SoldDate 
ORDER by tr.SoldDate DESC 
+0

イエスは速く、ありがとうございました! – Tronik

関連する問題