SQL Count不同使用多个唯一标识符

时间:2017-01-09 18:16:34

标签: mysql sql duplicates distinct aggregate-functions

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

问题是,这个引用的表格有重复的数据,所以我当前的 cost_per_session 并不算数。

到目前为止我有什么:

  • client_net_cleared =广告费用
  • ad_time,media_outlet,&程序 = combined是每个广告的唯一标识符
  • 差异 =假定广告生成的会话

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 :(得分:1)

在查询的第一行中删除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
相关问题