Скользящие цены за клик в BiqQuery - PullRequest
0 голосов
/ 16 января 2020

Отказ от ответственности: У меня очень базовые навыки c SQL, такие как уровень "только что вошел в дверь в первый раз"! Поэтому, пожалуйста, будьте осторожны.

Я пытаюсь настроить скользящую колонку CP C. У меня есть следующее, которое работает отлично. Но я не могу понять, как повторить столбец 7 в качестве скользящего расчета.

WITH
  data AS(
  SELECT
    Date,
    Device_type,
    CASE
      WHEN REGEXP_CONTAINS(Insertion_order,'.*Prospecting.*') THEN 'Prospecting'
      WHEN REGEXP_CONTAINS(Insertion_order,'.*Retargeting.*') THEN 'Retargeting'
      WHEN REGEXP_CONTAINS(Insertion_order,'.*Similar.*') THEN 'Similar Audience'
  END
    AS Strategy,
    ROUND(SUM(Total_media_cost__Advertiser_),2) AS Cost,
    SUM(Counter) AS Clicks,
    ROUND(CASE
        WHEN SUM(Counter) > 0 THEN SUM( Total_media_cost__Advertiser_) / SUM(Counter)
      ELSE
      0
    END
      ,2) AS CPC,

  FROM
    `data.data`
  GROUP BY
    Date,
    Device_type,
    Strategy)
SELECT
  Date,
  Device_type,
  Strategy,
  SUM(Cost) AS Cost,
  SUM(Clicks) AS Clicks,
  SUM(CPC) AS CPC,
  FROM
    data
  GROUP BY
    Date, Device_type, Strategy

таблица из вышеприведенного

Я прочитал о OVER и добавил следующую строку, но это привело к ошибке группы / aggregate: https://cloud.google.com/bigquery/docs/reference/standard-sql/analytic-function-concepts

CASE WHEN sum(Counter) > 0 THEN sum(Total_media_cost__Advertiser_) / sum(Counter) OVER (order by Date asc rows between unbounded preceding and current row)

Любая помощь очень ценится!

1 Ответ

1 голос
/ 16 января 2020

edit:

Хорошо, только что посмотрел вашу таблицу. Я думаю, что код, который вы пробовали, должен работать с небольшой модификацией. Будет ли это работать?

    WITH
  data AS(
  SELECT
    Date,
    Device_type,
    CASE
      WHEN REGEXP_CONTAINS(Insertion_order,'.*Prospecting.*') THEN 'Prospecting'
      WHEN REGEXP_CONTAINS(Insertion_order,'.*Retargeting.*') THEN 'Retargeting'
      WHEN REGEXP_CONTAINS(Insertion_order,'.*Similar.*') THEN 'Similar Audience'
    END
    AS Strategy,
    ROUND(SUM(Total_media_cost__Advertiser_),2) AS Cost,
    SUM(Counter) AS Clicks,
    ROUND(CASE
          WHEN SUM(Counter) > 0 THEN SUM( Total_media_cost__Advertiser_) / SUM(Counter)
          ELSE 0
          END
          ,2) AS CPC,
  FROM
    `data.data`
  GROUP BY
    Date,
    Device_type,
    Strategy),
AggregateData as
(
  SELECT
      Date,
      Device_type,
      Strategy,
      SUM(Cost) AS Cost,
      SUM(Clicks) AS Clicks,
      SUM(CPC) AS CPC,
  FROM
      data
  GROUP BY
      Date,
      Device_type,
      Strategy
)

SELECT
  *,
  safe_divide(SUM(Cost) OVER (ORDER BY Date) , SUM(Clicks) OVER (ORDER BY Date)) as RollingCPC
FROM
  AggregateData 

Я никогда не пробовал делить скользящие суммы, но это должно работать.


старый ответ

I Я не уверен, что это то, что вы ищете, но вы можете попробовать добавить следующее:

SUM(CPC) OVER(PARTITION BY Device_type, Strategy ORDER BY Date) AS RollingCPC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...