我的公司投放了一系列电视广告,我们正在评估网站流量变化带来的影响。我想根据每个广告的费用来确定我们看到的每次会话费用。

问题是,该表所引用的表具有重复数据,因此我当前的cost_per_session计数不正确。

到目前为止,我有:


client_net_cleared =广告费用
ad_time,media_outlet和&program =组合在一起是每个广告的唯一标识符
diff =广告产生的假定会话




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时,仅计算每个广告的一个实例。

编辑:修复查询,有半完成的行,我在问这个问题之前未能做到这一点。 :)

最佳答案

删除查询第一行中DISTINCT中的SELECT DISTINCT。在GROUP 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

10-06 02:24