Группа BigQuery по всем столбцам, кроме нескольких - PullRequest
0 голосов
/ 20 февраля 2019

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

SELECT my_table.* except(value_1, value_2)
    , sum(value_1)
    , sum(value_2)
FROM my_table
GROUP BY my_table.* except(value_1, value_2)

Но, к сожалению, GROUP BY my_table.* except(value_1, value_2) не работают.Любые предложения, пожалуйста?

1 Ответ

0 голосов
/ 20 февраля 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT DISTINCT * EXCEPT(value_1, value_2, grp),
  SUM(value_1) OVER(PARTITION BY grp) sum_value_1,
  SUM(value_2) OVER(PARTITION BY grp) sum_value_2
FROM (
  SELECT *, REGEXP_REPLACE(TO_JSON_STRING(t), r'"(?:value_1|value_2)":.+?[,}]', '') grp
  FROM `project.dataset.table` t
)

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

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 value_1, 2 value_2, 3 value_3, 4 value_4 UNION ALL
  SELECT 11, 12, 3, 14 UNION ALL
  SELECT 21, 22, 3, 14
)
SELECT DISTINCT * EXCEPT(value_1, value_2, grp),
  SUM(value_1) OVER(PARTITION BY grp) sum_value_1,
  SUM(value_2) OVER(PARTITION BY grp) sum_value_2
FROM (
  SELECT *, REGEXP_REPLACE(TO_JSON_STRING(t), r'"(?:value_1|value_2)":.+?[,}]', '') grp
  FROM `project.dataset.table` t
)

с результатом как

Row value_3 value_4 sum_value_1 sum_value_2  
1   3       14      32          34   
2   3       4       1           2    

Выше будет работать с любым количеством столбцов, и вам не нужно ссылаться на них все явно - только те столбцы, которые должны быть исключены для явной ссылки - value_1 и value_2 в этом примере

...