2017-01-09 58 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

请[编辑]你的问题,以显示几行输入数据和期望的结果集。你的表中的行是否完全重复(在所有列中),或者它们在某些列中有所不同? –

+0

好点!我现在提供了样本数据。表中有几行是完全重复的,在任何列中都没有差异。 – Minadorae

回答

1

在查询的第一行中删除SELECT DISTINCT中的DISTINCTGROUP BY查询中没有任何意义。

如果你的行完全重复,尽量重复数据删除的表,你把它放到GROUP BY粉碎机之前通过更换

FROM tableau.km_tv_ad_data_merged tadm 

FROM (SELECT DISTINCT timestamp, media_outlet, program, 
         client_net_cleared, 
         before_ad_sum, after_ad_sum 
     FROM tableau.km_tv_ad_data_merged 
    ) tadm