行的简单SQL聚合,其中值是整数数组

问题描述 投票:0回答:1

我试图将我的表修改为稍微不同的东西。贝娄是我的表,其中langs包含每行的相同数组。 (总是[Dutch, English, French])。

#standardSQL
SELECT ['French','English','Dutch'] langs, [0, 2, 1] as value Union ALL
SELECT ['French','English','Dutch'], [1, 0, 1]

输出如下:

Row langs          value
-------------------------
1   Dutch          1
    English        2
    French         0
-------------------------
2   Dutch          1
    English        3
    French         0
-------------------------

现在我想在所有行上总结值数组,并创建另一个表,其值列表示总值。但我正在寻找的版本如下:

Row langs          value
-------------------------
1   Dutch          2  # (1+1)
-------------------------
2   English        5  # (2+3)
-------------------------
3   French         1  # (1+0)
-------------------------

我知道这可能看起来像一个非常转储的问题,但我对SQL非常新。

google-bigquery
1个回答
2
投票

以下是BigQuery Standard SQL

#standardSQL
SELECT lang, SUM(val) total
FROM `project.dataset.table`, 
UNNEST(langs) lang WITH OFFSET
JOIN UNNEST(value) val WITH OFFSET
USING(OFFSET)
GROUP BY lang  

您可以使用虚拟/样本数据进行测试,使用上面的示例,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT ['French','English','Dutch'] langs, [1, 2, 1] AS value UNION ALL
  SELECT ['French','English','Dutch'], [0, 3, 1]
)
SELECT lang, SUM(val) total
FROM `project.dataset.table`, 
UNNEST(langs) lang WITH OFFSET
JOIN UNNEST(value) val WITH OFFSET
USING(OFFSET)
GROUP BY lang

结果

Row lang    total    
1   French  1    
2   English 5    
3   Dutch   2    
© www.soinside.com 2019 - 2024. All rights reserved.