Google bigquery 如何将SUM()聚合函数一次应用于多个列?

Google bigquery 如何将SUM()聚合函数一次应用于多个列?,google-bigquery,Google Bigquery,我有一个通用的表表达式,别名为table,它是我用大查询标准SQL创建的table有许多列,我想使用groupby聚合将这些列汇总成一行 我尝试了这个查询,它返回了错误 *只能用于计数(*) 我试图避免对n列执行此操作: SELECT "all" as problem_type, SUM(Value_1), SUM(Value_2), .... SUM(Value_N) FROM table GROUP BY problem_type 是否有人能够帮助您使用高效的查询来解决此任务?下面是我可

我有一个通用的表表达式,别名为
table
,它是我用大查询标准SQL创建的
table
有许多列,我想使用
groupby
聚合将这些列汇总成一行

我尝试了这个查询,它返回了错误

*
只能用于计数(*)

我试图避免对n列执行此操作:

SELECT "all" as problem_type, SUM(Value_1), SUM(Value_2), .... SUM(Value_N) 
FROM table
GROUP BY problem_type

是否有人能够帮助您使用高效的查询来解决此任务?

下面是我可以建议您的唯一选项(BigQuery标准SQL)

您可以使用下面的示例中的示例/虚拟数据测试、播放上述内容

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 problem_type, 1 value_1, 2 value_2, 3 value_3 UNION ALL
  SELECT 1, 4, 5, 6 UNION ALL
  SELECT 1, 7, 8, 9 UNION ALL
  SELECT 2, 14, 15, 16 UNION ALL
  SELECT 2, 17, 18, 19 
)
SELECT problem_type, key, SUM(CAST(value AS INT64)) AS sum_value
FROM `project.dataset.table` t,
UNNEST(SPLIT(REGEXP_REPLACE(TO_JSON_STRING(t), '[{}"]', ''))) kv,
UNNEST([STRUCT(SPLIT(kv, ':')[OFFSET(0)] AS key, SPLIT(kv, ':')[OFFSET(1)] AS value)])
WHERE NOT key = 'problem_type'
GROUP BY problem_type, key
结果

Row problem_type    key         sum_value    
1   1               value_1     12   
2   1               value_2     15   
3   1               value_3     18   
4   2               value_1     31   
5   2               value_2     33   
6   2               value_3     35   
所以,正如你看到的,不是你最初问的问题,而是下面的问题

Row problem_type    value_1    value_2    value_3 
1   1               12         15         18     
2   2               31         33         35   

但我认为这是一个合理的选择,特别是如果这样的列的数量大到足以浪费时间,并且在下面显式键入所有列是我唯一能建议您的选择(BigQuery标准SQL)

您可以使用下面的示例中的示例/虚拟数据测试、播放上述内容

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 problem_type, 1 value_1, 2 value_2, 3 value_3 UNION ALL
  SELECT 1, 4, 5, 6 UNION ALL
  SELECT 1, 7, 8, 9 UNION ALL
  SELECT 2, 14, 15, 16 UNION ALL
  SELECT 2, 17, 18, 19 
)
SELECT problem_type, key, SUM(CAST(value AS INT64)) AS sum_value
FROM `project.dataset.table` t,
UNNEST(SPLIT(REGEXP_REPLACE(TO_JSON_STRING(t), '[{}"]', ''))) kv,
UNNEST([STRUCT(SPLIT(kv, ':')[OFFSET(0)] AS key, SPLIT(kv, ':')[OFFSET(1)] AS value)])
WHERE NOT key = 'problem_type'
GROUP BY problem_type, key
结果

Row problem_type    key         sum_value    
1   1               value_1     12   
2   1               value_2     15   
3   1               value_3     18   
4   2               value_1     31   
5   2               value_2     33   
6   2               value_3     35   
所以,正如你看到的,不是你最初问的问题,而是下面的问题

Row problem_type    value_1    value_2    value_3 
1   1               12         15         18     
2   2               31         33         35   

但我认为这是一个合理的选择,特别是如果这样的列的数量大到足以浪费时间并显式键入所有列

给了我们一些示例数据和期望的结果,我最初有一个示例表的图像,但我的声誉高到可以发布。米哈伊尔的回答有助于我得到所需的东西。非常感谢。给我们一些样本数据和期望的结果我最初有一个示例表的图像,但我的声誉很高,可以发布。米哈伊尔的回答有助于我得到所需的东西。非常感谢。