クエリで日付、リード、クリックの3つのテーブルを組み合わせたいと思います。
テーブルは次のようになります。
日にち:
|date|
リード:
id|time|commission
クリック:
id|time|commission
テーブルの日付は日付を保存するだけで、クリックやリードなしで日付を取得するときに使用されます。
したがって、テーブルに次のデータがある場合:
日にち:
2009-06-01
2009-06-02
2009-06-03
リード:
1|2009-06-01|400
2|2009-06-01|300
3|2009-06-03|350
クリック:
1|2009-06-01|1
2|2009-06-03|2
3|2009-06-03|2
4|2009-06-03|0
日付、クリック数、クリックによって発生したコミッション(コミッションを与えないクリックがあります)、リード数、リードによって生成されたコミッション、および合計コミッションを取得したいと思います。したがって、上記の表を使用して、次の情報を取得したいと思います。
2009-06-01|1|1|2|700|701|
2009-06-02|0|0|0|0|0
2009-06-03|3|4|1|350|354|
私は次の組合で試しました:
SELECT
campaign_id,
commission_date,
SUM( click_commission ) AS click_commission,
click,
SUM( lead_commission ) AS lead_commission ,
lead,
SUM( total_commission ) as total_commission
FROM(
SELECT
click.campaign_id AS campaign_id,
DATE( click.time ) AS commission_date,
click.commission AS click_commission,
(SELECT count(click.id) from click GROUP BY date(click.time)) as click,
0 as lead_commission,
0 as lead,
click.commission AS total_commission
FROM click
UNION ALL
SELECT
lead.campaign_id AS campaign_id,
DATE( lead.time ) AS commission_date,
0 as click_commission,
0 as click,
lead.commission AS lead_commission,
lead.id as lead,
lead.commission AS total_commission
FROM lead
UNION ALL
SELECT
0 AS campaign_id,
date.date AS commission_date,
0 AS click_commission,
0 as click,
0 AS lead_commission,
0 as lead,
0 AS total_commission
FROM date
) AS foo
WHERE commission_date BETWEEN '2009-06-01' AND '2009-07-25'
GROUP BY commission_date
ORDER BY commission_date LIMIT 0, 10
ただし、これはクリック数とリード数の両方をカウントするためには機能しません。上記のコードは、すべてのリードでボット0の適切なクリック数を示します。コードを移動してリードテーブルから選択を配置すると、すべてのクリックでリードが右ボット0になります。クエリから両方のカウントを取得する方法を見つけることができませんでした。
そこで、代わりに左結合を試しました。
SELECT
date.date as date,
count( DISTINCT click.id ) AS clicks,
sum(click.commission) AS click_commission,
count( lead.id ) AS leads,
sum(lead.commission) AS lead_commission
FROM date
LEFT JOIN click ON ( date.date = date( click.time ) )
LEFT JOIN lead ON ( date.date = date( lead.time ) )
GROUP BY date.date
LIMIT 0 , 30
このクエリの問題は、日付に複数のクリックまたはリードがある場合、期待値* 2を返すことです。したがって、2009-06-01では、リードコミッションの期待値700ではなく1400を返します。
したがって、UNIONではカウントに問題があり、左側の結合ではSUMが機能していません。
可能であればUNIONに固執したいのですが、両方のカウントを取得する方法が見つかりませんでした。
(これは、この以前の質問のフォローアップですが、カウントを要求しなかったため、新しい質問を投稿しました。)