2009-04-12 29 views
3

私は、収益を報告するためのクエリを考え出しています。クリック数とオファー数の2つのテーブルが必要です。収入は、オファーのコンバージョン数*手数料によって計算されます。コンバージョンは、クリック数表の「conversionDate」フィールドに格納され、各オファーのオファーはオファー表に格納されます。sqlクエリwith ifステートメント

クーポンの収益を加算する際に変換されなかったクリック(クリックはconversionDateがNULL)を無視する条件がクエリに必要です。

私は何を持っていることは、それが収入のために正しい値を与えていないよう微調整のビットを必要とする:

((CをISNULLない場合は、(c.id)クリックをカウントし、o.nameプランを選択します。 conversionDate)、収益=収益+収益、収入)収益FROMクリック数c、oを提供します。c.offerID = o.ID GROUP BY o.ID;

今はクリック数に3つのダミーレコードがありますが、そのうち2つはコンバージョンです。手数料を1に設定すると、収益は2になるはずです。結果は1です。私は正しい道を歩いているのか、収益計算を何らかのサブクエリか何にするべきですか?

答えて

6

が、私は、クエリをこのように記述します:ここで

SELECT o.name AS offer, COUNT(c.id) AS clicks, 
    SUM(IF(c.conversionDate IS NOT NULL, o.commission, NULL)) AS revenue 
FROM offers o JOIN clicks c ON (c.offerID=o.ID) 
GROUP BY o.ID; 

は、別の解決策です、しかし提供していない変換されたクリックはthに表示されていませんeクエリの結果:

SELECT o.name AS offer, COUNT(c.id) AS clicks, 
    SUM(o.commission) AS revenue 
FROM offers o JOIN clicks c 
    ON (c.offerID=o.ID AND c.conversionDate IS NOT NULL) 
GROUP BY o.ID; 
+0

最初のクエリは私が必要としたものです。どうもありがとう! –

0

移動句

+0

この具体的な例では動作しますが、実際に使用しているクエリではそれ以上の情報があります。私は他のデータを混乱させるので、変換しなかったクリックを除外することはできません。 –

+0

@ [wbgriffin]:2つのサブ/クエリに分割するか、実際のものを投稿します。不完全な/誤解を招く例を使って質問に正確に答えることはできません; –

0

このクエリ試しWHEREにはnullチェック:

SELECT o.name offer, COUNT(c.id) clicks, IF(c.conversionDate IS NULL, revenue + o.commission, revenue) revenue 
FROM clicks c, offers o 
WHERE c.offerID=o.ID 
GROUP BY o.ID; 
+0

私の元のクエリと同じ結果.. –

0
SELECT o.name offer, count(*) clicks, (COUNT(c.ID) * o.commission) revenue 
FROM clicks c, offers o 
WHERE c.ConversionDate is not null and c.offerID=o.ID 
GROUP BY o.ID, o.name, o.commission; 
関連する問題