У меня возникают некоторые проблемы, когда добавление последнего столбца приводит к тому, что мой groupin не работает должным образом (так я думаю)
У меня есть этот код:
with deliveryData AS(
SELECT NetworkID, Creative_Type, SUM(Impressions) AS Impressions, SUM(clicks) AS Clicks,
CASE WHEN Creative_Type = "Display"
THEN
CASE WHEN Impressions >= 100000000
THEN rate.DisplayAdsL3_CPM
WHEN Impressions > 50000000 AND Impressions < 100000000
THEN rate.DisplayAdsL2_CPM
WHEN Impressions <= 50000000
THEN rate.DisplayAdsL1_CPM
END
WHEN Creative_Type = "Tracking"
THEN
CASE WHEN Impressions = 0
THEN rate.ClickTracker_CPC
ELSE
rate.Tracking_CPM
END
END AS AdServeRate
FROM Dashboard.CM_2020_03
LEFT JOIN Dashboard.campaignManager_ClientRateTable as rate ON NetworkID = rate.Partner_ID
Group By 1,2,5
)
SELECT *
FROM deliveryData as data
Что дает мне очень чистый результат (всего 3 строки):
Row NetworkID Creative_Type Impressions Clicks AdServeRate
1 1234 Tracking 0 100 0.02
2 1234 Display 6775966 59151 0.15
3 1234 Tracking 520179 0 0.07
Я намерен объявить последний столбец, вычисляющий (в зависимости от Creative_Type) Imperssions или кликов * AdServeRate.
Я добавил еще один оператор CASE в приведенный выше код:
with deliveryData AS(
SELECT NetworkID, Creative_Type, SUM(Impressions) AS Impressions, SUM(clicks) AS Clicks,
CASE WHEN Creative_Type = "Display"
THEN
CASE WHEN Impressions >= 100000000
THEN rate.DisplayAdsL3_CPM
WHEN Impressions > 50000000 AND Impressions < 100000000
THEN rate.DisplayAdsL2_CPM
WHEN Impressions <= 50000000
THEN rate.DisplayAdsL1_CPM
END
WHEN Creative_Type = "Tracking"
THEN
CASE WHEN Impressions = 0
THEN rate.ClickTracker_CPC
ELSE
rate.Tracking_CPM
END
END AS AdServeRate,
CASE WHEN Creative_Type = "Display"
THEN
CASE WHEN Impressions >= 100000000
THEN ROUND(rate.DisplayAdsL3_CPM * Impressions/1000,2)
WHEN Impressions > 50000000 AND Impressions < 100000000
THEN ROUND(rate.DisplayAdsL2_CPM * Impressions/1000,2)
WHEN Impressions <= 50000000
THEN ROUND(rate.DisplayAdsL1_CPM * Impressions/1000,2)
END
WHEN Creative_Type = "Tracking"
THEN
CASE WHEN Impressions = 0
THEN ROUND(rate.ClickTracker_CPC * Clicks,2)
ELSE
ROUND(rate.Tracking_CPM * Impressions/1000,2)
END
END AS AdServeFee
FROM Dashboard.CM_2020_03
LEFT JOIN Dashboard.campaignManager_ClientRateTable as rate ON NetworkID = rate.Partner_ID
Group By 1,2,5,6
)
SELECT *
FROM deliveryData as data
Однако вместо трех строк с добавленной комиссией теперь у меня есть 207 строк.
Я также пробовал использовать результат первого случая ( AdServeRate) во второй, но он сообщает мне, что не распознает AdServeRate
Любая помощь будет очень приветствоваться