SQL BigQuery - сравнение итоговых значений из двух таблиц. - PullRequest
0 голосов
/ 10 июля 2020

У меня есть две таблицы, одна, и я хотел бы сравнить количество событий в каждой из них, а затем получить разницу.

Я хотел бы проверить заданную дату и посмотреть, совпадает ли тип события из таблицы A с связанный столбец в таблице B, например, в таблице A EventType Bounce count 6 и в таблице B total_bounces 166, тогда, если я могу получить результат, который говорит, что совпадения нет или что-то вроде +160 в таблице B et c

Я не уверен, как я сравниваю строку с таблицей столбцов, предложения очень важны.

Таблица A

Row Table

Table B

Столбец Таблица

1 Ответ

1 голос
/ 10 июля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT EventDate,
  b.total_sents - a.total_sents AS total_sents_diff,
  b.total_bounces - a.total_bounces AS total_bounces_diff,
  b.total_opens - a.total_opens AS total_opens_diff,
  b.total_clicks - a.total_clicks AS total_clicks_diff
FROM (
  SELECT EventDate,
    SUM(IF(EventType IN ('Bounce', 'Open'), EventCount, 0)) AS total_sents,
    SUM(IF(EventType = 'Bounce', EventCount, 0)) AS total_bounces,
    SUM(IF(EventType = 'Open', EventCount, 0)) AS total_opens,
    SUM(IF(EventType = 'Click', EventCount, 0)) AS total_clicks
  FROM `project.dataset.tableA`
  GROUP BY EventDate
) a
LEFT JOIN `project.dataset.tableB` b
USING(EventDate)

вы можете протестировать, поиграться с приведенными выше примерами данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.tableA` AS (
  SELECT '2020-07-05' EventDate, 'Bounce' EventType, 6 EventCount UNION ALL
  SELECT '2020-07-05', 'Click', 16737 UNION ALL
  SELECT '2020-07-05', 'Open', 187400 UNION ALL
  SELECT '2020-07-06', 'Bounce', 16 UNION ALL
  SELECT '2020-07-06', 'Click', 26737 UNION ALL
  SELECT '2020-07-06', 'Open', 387400 
), `project.dataset.tableB` AS (           
  SELECT '2020-07-05' EventDate, 155057 total_sents, 166 total_bounces, 75361 total_opens, 8783 total_clicks UNION ALL
  SELECT '2020-07-06', 255057, 266, 85361, 9783 
)
SELECT EventDate,
  b.total_sents - a.total_sents AS total_sents_diff,
  b.total_bounces - a.total_bounces AS total_bounces_diff,
  b.total_opens - a.total_opens AS total_opens_diff,
  b.total_clicks - a.total_clicks AS total_clicks_diff
FROM (
  SELECT EventDate,
    SUM(IF(EventType IN ('Bounce', 'Open'), EventCount, 0)) AS total_sents,
    SUM(IF(EventType = 'Bounce', EventCount, 0)) AS total_bounces,
    SUM(IF(EventType = 'Open', EventCount, 0)) AS total_opens,
    SUM(IF(EventType = 'Click', EventCount, 0)) AS total_clicks
  FROM `project.dataset.tableA`
  GROUP BY EventDate
) a
LEFT JOIN `project.dataset.tableB` b
USING(EventDate)    

с выводом

Row EventDate   total_sents_diff    total_bounces_diff  total_opens_diff    total_clicks_diff    
1   2020-07-05  -32349              160                 -112039             -7954    
2   2020-07-06  -132359             250                 -302039             -16954   
...