2017-01-09 5 views
0

Meine Firma hat eine Reihe von TV-Anzeigen geschaltet und wir messen die Auswirkungen von Änderungen in unserem Website-Traffic. Ich möchte die Kosten pro Sitzung, die wir generiert haben, anhand der Kosten für jede Anzeige ermitteln.SQL-Zählung mit mehreren eindeutigen IDs

Das Problem ist, die Tabelle, auf die es verweist, hat doppelte Daten, so dass meine derzeit cost_per_session nicht richtig zählt.

Was ich habe, so weit:

  • client_net_cleared = Kosten für ad
  • ad_time, media_outlet, & Programm = Kombinierter sind eine eindeutige Kennung für jede Anzeige
  • diff = angenommene Sitzungen, generiert von der Anzeige

.

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 

Beispieldaten:

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 

Was ich brauche: nur eine Instanz jeder Anzeige zählen, wenn cost_per_session berechnet wird.

BEARBEITEN: Die Abfrage behoben, hatte eine halb abgeschlossene Zeile, wo ich dies versäumt, bevor Sie die Frage gestellt. :)

+1

Bitte [Bearbeiten] Ihre Frage ein paar Zeilen zu zeigen, von Eingabedaten und einer gewünschten Ergebnismenge. Sind die Zeilen in Ihrer Tabelle doppelt vorhanden (in allen Spalten) oder unterscheiden sie sich in einigen Spalten? –

+0

Guter Punkt! Ich habe jetzt Beispieldaten zur Verfügung gestellt. Es gibt Zeilen in der Tabelle, die vollständige Duplikate sind, ohne Unterschied in irgendeiner Spalte. – Minadorae

Antwort

1

Die DISTINCT in SELECT DISTINCT in der ersten Zeile Ihrer Abfrage loswerden. Es ergibt keinen Sinn in einer GROUP BY Abfrage.

Wenn Ihre Zeilen vollständig dupliziert werden, versuchen, die Tabelle Deduplizierung, bevor Sie es in die GROUP BY Schleifer setzen durch

ersetzt
FROM tableau.km_tv_ad_data_merged tadm 

mit

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