2017-01-09 10 views
0

Моя компания провела серию телевизионных объявлений, и мы измеряем влияние изменений на нашем веб-сайте. Я хотел бы определить стоимость за сеанс, который мы видели сгенерированный, исходя из стоимости каждого объявления.SQL Count Distinct с использованием нескольких уникальных идентификаторов

Беда в том, что эта ссылка ссылается на дубликаты данных, поэтому мой текущий 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

Избавьтесь от 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