2011-12-03 17 views
0

私はデータベースに2つのテーブルを使用しています。Mysql join query

表A:

id | date 
---------------------- 
    12001 | 2011-01-01 
    13567 | 2011-01-04 
    13567 | 2011-01-04 
    11546 | 2011-01-07 
    13567 | 2011-01-07 
    18000 | 2011-01-08 

表B:これらのテーブルは次のようになり

user | date  | amount 
---------------------------------- 
    15467 | 2011-01-04 | 140 
    14568 | 2011-01-04 | 120 
    14563 | 2011-01-05 | 140 
    12341 | 2011-01-07 | 140 
    18000 | 2011-01-08 | 120 

私は、これら2つのテーブルを結合しますクエリを必要としています。

最初のクエリでは、テーブルAのグループの合計ユーザー数と、テーブルAの一意のユーザー数が日付別にグループ化されます。そのクエリは次のようになります。

2番目の表からは、日付でグループ化された金額の合計が必要です。 そのクエリは次のようになります。

私がやりたいことはコラム「日付」に一つにこれらの2つのクエリをマージすることであり、結果として、私は次のリストを取得すること
SELECT SUM(amount) AS total_amount FROM B GROUP BY DATE_FORMAT(date, '%Y-%m-%d') 

date  | unique | total | amount 
----------------------------------------------- 
2011-01-01 |  1  |  1 |  0 
2011-01-04 |  1  |  2 | 260 
2011-01-05 |  0  |  0 | 140 
2011-01-07 |  2  |  2 | 140 
2011-01-08 |  1  |  1 | 120 

1つのクエリを使用してそれを行うにはどうすればよいですか? ありがとうございます。

答えて

0
select date_format(a.date, '%Y-%m-%d') as date, a.uniq, a.total, ifnull(b.amount, 0) as amount 
from ( 
    select count(distinct id) as uniq, count(*) as total, date 
    from tablea 
    group by date 
) a 
left join (
    select sum(amount) as amount, date 
    from tableb 
    group by date 
) b on a.date = b.date 
order by a.date 

私はフィールドdatedatetimeタイプであることを前提としています。最終結果セット(この場合はdateフィールド)に出力フィールドをフォーマットする方が良いでしょう。

あなたの質問にはすべてjoinが必要です。