Простая SQL-агрегация строк, где значения являются массивами целых чисел - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь изменить свою таблицу на что-то немного другое.Ниже приводится моя таблица, где 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.

1 Ответ

2 голосов
/ 12 апреля 2019

Ниже для 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    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...