2013-09-30 36 views
1

我似乎無法得到此查詢以給我正確的結果。查詢以獲得展示次數和相關點擊次數

select 
    datepart(day, i.timestamp) as [day], 
    i.campaignID, i.creativeID 
    , count(distinct i.sessionID) as [Impressions] 
    , count(case when e.eventID in (1,2,3) then 1 else 0 end) as Clicks 

from impressions i 
left join Events e 
    on i.sessionID = e.sessionID 

group by 
    datepart(day, i.timestamp) 
    , i.campaignID, i.creative 

order by [day] 

我也嘗試在then子句中用e.eventid替換1。我在結果中獲得太多點擊。事件每個sessionid有多個記錄,因爲許多類型的事件可能發生在同一個會話中(滾動,展開等),我希望計算的事件將有一個1,2或3的偶數,因爲這些將是3可能的鏈接,你可以點擊。我在尋找的是通過計算展示次數和相關點擊來計算點擊率,如果沒有點擊,我希望它反映爲0,而不是從結果中丟失,這就是即時獲得的結果。

任何幫助表示感謝,提前感謝您寶貴的時間!

回答

3

嘗試用sum替換第二count,就像這樣:

select 
    datepart(day, i.timestamp) as [day], 
    i.campaignID, i.creativeID 
    , count(distinct i.sessionID) as [Impressions] 
    , sum(case when e.eventID in (1,2,3) then 1 else 0 end) as Clicks 

from impressions i 
left join Events e 
    on i.sessionID = e.sessionID 

group by 
    datepart(day, i.timestamp) 
    , i.campaignID, i.creative 

order by [day] 

或者,你可以繼續count和移動eventID過濾到where條款:

select 
    datepart(day, i.timestamp) as [day], 
    i.campaignID, i.creativeID 
    , count(distinct i.sessionID) as [Impressions] 
    , count(e.eventID) as Clicks 

from impressions i 
left join Events e 
    on i.sessionID = e.sessionID 

where e.eventID in (1,2,3) 

group by 
    datepart(day, i.timestamp) 
    , i.campaignID, i.creative 

order by [day] 

但我懷疑您的on條款中將需要額外的過濾條件。但是,我不確定你的桌子的結構。

+0

看起來更有可能,謝謝!你能否解釋爲什麼sum(1)與count(1)有不同的結果? –

+1

當然。 'count'包含0/1系列的每個元素,無論是0還是1('count {0,1,1,1,0,0,1}'= 7)。 'sum'只加1,而0不作區分('sum {0,1,1,1,0,0,1}'= 0 + 1 + 1 + 1 + 0 + 0 + 1 = 4)。但是所有這些都適用於集合。 sum(1)與count(1)沒有差別,因爲第一個合計爲1,第二個合計爲1個元素。 – geomagas

+0

gotcha謝謝,即時通訊驚訝計數包括零 - 案例結構暗示,如果沒有......它只會包括一個零......啊,好吧,它只是對我明白了。 * facepalms * - whutta idjut:P –

相關問題