2017-01-09 7 views
0

私の会社は一連のテレビ広告を実行し、ウェブサイトのトラフィックの変化による影響を測定しています。各広告の費用に基づいて、私が見たセッションあたりの費用を決定したいと思います。複数の一意の識別子を使用して異なるSQLカウント

問題は、これは参照しているテーブルに重複データがあるため、現在cost_per_sessionは正しくカウントされていません。

私がこれまで持っている:

  • は、広告の =コストをclient_net_cleared
  • ad_time、media_outlet、&プログラム =複合各広告
  • 差分の一意の識別子です =広告によって生成された想定セッション

SELECT DISTINCT tadm.timestamp AS ad_time 
, tadm.media_outlet AS media_outlet 
, tadm.program AS program 
, tadm.client_net_cleared AS client_net_cleared 
, SUM(tadm.before_ad_sum) AS before_ad_sessions 
, SUM(tadm.after_ad_sum) AS after_ad_sessions 
, (SUM(tadm.after_ad_sum) - SUM(tadm.before_ad_sum)) AS diff 
, CASE WHEN tadm.client_net_cleared = 0 THEN null 
    WHEN (SUM(tadm.after_ad_sum) - SUM(tadm.before_ad_sum)) <1 THEN null 
    ELSE (tadm.client_net_cleared/(SUM(tadm.after_ad_sum) - SUM(tadm.before_ad_sum))) 
    END AS cost_per_session 

FROM tableau.km_tv_ad_data_merged tadm 

GROUP BY ad_time,media_outlet,program,client_net_cleared 

サンプルデータ:

ad_time    | media_outlet | program  | client_net_cleared | before_ad_sessions | after_add_sessions | diff | cost_per_session 
---------------------|---------------|----------------|--------------------|--------------------|--------------------|------|----------------- 
2016-12-09 22:55:00 | DIY   |    |    970 |     55 |     72 | 17 |   57.05 
2016-12-11 02:22:00 | E!   | E! News  |    388 |     25 |     31 | 6 |   64.66 
2016-12-19 21:15:00 | Cooking  | The Best Thing |    428 |     70 |     97 | 27 |   15.85 
2016-12-22 14:01:00 | Oxygen  | Next Top Model |    285 |     95 |    148 | 53 |   5.37 
2016-12-09 22:55:00 | DIY   |    |    970 |     55 |     72 | 17 |   57.05 
2016-12-04 16:13:00 | Headline News | United Shades |    1698 |     95 |    137 | 42 |   40.42 

私は必要なもの:cost_per_sessionを計算するとき のみ各広告の1つのインスタンスをカウントします。

EDIT:質問を修正しましたが、質問をする前にこれをやっていないところで半分の完成した行がありました。 :)

+1

FROM tableau.km_tv_ad_data_merged tadm 

を置き換えることによって、あなたはGROUP BYグラインダーに入れて前にテーブルを重複除外してくださいしてみてくださいいくつかの行を表示するには、[編集]あなたの質問入力データと所望の結果セットとの比較を行う。テーブル内の行は、(すべての列で)重複しているか、またはいくつかの列で異なるのですか? –

+0

良い点!サンプルデータを提供しました。テーブルには、完全な重複列があり、列に違いはありません。 – Minadorae

答えて

1

DISTINCTを照会の最初の行にSELECT DISTINCTに入れてください。 GROUP BYクエリでは意味がありません。

あなたの行が完全に重複している場合は、

FROM (SELECT DISTINCT timestamp, media_outlet, program, 
         client_net_cleared, 
         before_ad_sum, after_ad_sum 
     FROM tableau.km_tv_ad_data_merged 
    ) tadm 
関連する問題