Как разделить один столбец на несколько столбцов в стандартном SQL-запросе Big - PullRequest
0 голосов
/ 28 августа 2018

Использование Google BigQuery

  WITH prep AS (
  SELECT 
  SPLIT(offer.name, '-') AS split,
  id
  FROM `hasoffer.offers_new` AS offer
  )

 SELECT *
 FROM
 (
  SELECT
  split[SAFE_ORDINAL(1)] AS Game,
  split[SAFE_ORDINAL(2)] AS GEO,
  IF ( REGEXP_CONTAINS ('INTERNAL - POGED',offers.name), "POGED", 
  IF(REGEXP_CONTAINS ('INTERNAL',offers.name), "Internal", IF( 
  REGEXP_CONTAINS('REDIRECT',offers.name), "REDIRECT", "Public"))) AS 
  Category,
  DATE(conv.datetime) AS Date,
  (SUM(conv.revenue_cents)/100) AS Revenue
  FROM `hasoffer.offers_new` AS offers
  LEFT JOIN
  prep
  ON
  offers.id=prep.id
  LEFT JOIN
  `hasoffer.conversions` AS conv
  ON offers.id = conv.offer_id
  WHERE 
  conv.advertiser_id = 632 
  AND EXTRACT(MONTH FROM conv.datetime) = EXTRACT(MONTH FROM CURRENT_DATE())
  AND EXTRACT(YEAR FROM conv.datetime) = 2018
  AND conv.status != 'rejected'
  AND conv.affiliate_sub1 IS NOT NULL
  group by
  GEO,
  Game,
  Category,
  Date
  order by
  Date)AS SourceTable

Вот как выглядит таблица:

This is how the table looks

Ожидаемый результат:

Expected Output

  • Столбец «Дата» должен быть разбит на несколько столбцов, каждый из которых представляет день в месяце, и должен содержать значение суммы дохода для различных игр и гео.

  • Кроме того, необходимо создать столбец под названием Общая сумма, в котором указывается общий доход от игровой рекламы за месяц. Пожалуйста, предложите способ сделать это

1 Ответ

0 голосов
/ 28 августа 2018

Чтобы сделать нужное вам вращение с помощью BigQuery, вы можете использовать ...

SELECT
  Game,
  Geo,
  Category,
  SUM(CASE WHEN EXTRACT(DAY FROM Date) = 01 THEN Revenue ELSE 0 END)   AS DAY_OF_MONTH_01,
  SUM(CASE WHEN EXTRACT(DAY FROM Date) = 02 THEN Revenue ELSE 0 END)   AS DAY_OF_MONTH_02,
  SUM(CASE WHEN EXTRACT(DAY FROM Date) = 03 THEN Revenue ELSE 0 END)   AS DAY_OF_MONTH_03,
  ...
  SUM(CASE WHEN EXTRACT(DAY FROM Date) = 30 THEN Revenue ELSE 0 END)   AS DAY_OF_MONTH_30,
  SUM(CASE WHEN EXTRACT(DAY FROM Date) = 31 THEN Revenue ELSE 0 END)   AS DAY_OF_MONTH_31,
  SUM(Revenue)                                                         AS GRAND_TOTAL
FROM
  yourSource
WHERE
      Date >= DATE '2018-08-01'
  AND Date <  DATE '2018-09-01'
GROUP BY
  Game,
  Geo,
  Category

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

SELECT
  Game,
  Geo,
  Category,
  Date,
  SUM(Revenue)   AS Revenue
FROM
  yourSource
WHERE
      Date >= DATE '2018-08-01'
  AND Date <  DATE '2018-09-01'
GROUP BY
  Game,
  Geo,
  Category,
  Date

Тогда у вас не может быть "огромных" данных, вы просто имеете то, что вам нужно, и пусть лист поворачивает их ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...