Как агрегировать и группировать по в Google BigQuery - PullRequest
0 голосов
/ 08 марта 2019

В Google BigQuery я хотел бы свернуть показатели, основанные на определенных измерениях (в данном случае, по кампании и партнеру). Когда я использую приведенный ниже код, я получаю сообщение об ошибке:

Выражение 'a.genre' отсутствует в списке GROUP BY.

Может кто-нибудь посоветовать, что мне нужно исправить в моем сценарии? Спасибо!
См. пример таблицы ниже (не обращайте внимания на то, как заголовки в таблице ниже точно не соответствуют предоставленному сценарию):

enter image description here

SELECT
  SUM(a.amount) totalcost, 
  a.campaign_name, 
  c.friendly_campaign, 
  p.friendly_partner_name, 
  a.partner_name, 
  a.genre, 
  a.season, 
  a.package
FROM
  [TABLE 1] a
  LEFT OUTER JOIN
  [TABLE 2] p
ON
  a.partner_name = p.raw_partner_name
LEFT OUTER JOIN
  [TABLE 3] c 
ON
  a.campaign_name = c.campaign
GROUP BY ROLLUP(c.friendly_campaign, p.friendly_partner_name)

1 Ответ

2 голосов
/ 08 марта 2019

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

SELECT
  SUM(a.amount) totalcost, 
  c.friendly_campaign, 
  p.friendly_partner_name, 
FROM
  [TABLE 1] a
  LEFT OUTER JOIN
  [TABLE 2] p
ON
  a.partner_name = p.raw_partner_name
LEFT OUTER JOIN
  [TABLE 3] c 
ON
  a.campaign_name = c.campaign
GROUP BY ROLLUP(c.friendly_campaign, p.friendly_partner_name)

, либо добавить их в группы, в которые вы агрегируете a.amount:

SELECT
  SUM(a.amount) totalcost, 
  a.campaign_name, 
  c.friendly_campaign, 
  p.friendly_partner_name, 
  a.partner_name, 
  a.genre, 
  a.season, 
  a.package
FROM
  [TABLE 1] a
  LEFT OUTER JOIN
  [TABLE 2] p
ON
  a.partner_name = p.raw_partner_name
LEFT OUTER JOIN
  [TABLE 3] c 
ON
  a.campaign_name = c.campaign
GROUP BY ROLLUP(2,3,4,5,6,7,8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...