Mam taki zbiór danych:

id | house_id | room_data
-------------------------------------------
1  | abc      | [1, 1, 1, 1, 1, 1, 1]
2  | abc      | [1, 1, 0, 0, 0, 0, 0]
3  | abc      | [0, 1, 2, 1, 0, 1, 0]
4  | abc      | [1, 1, 1, 0, 1, 1, 1]
5  | def      | [1, 1, 1, 1, 0, 0, 0]
6  | def      | NULL
7  | def      | [1, 1, 1, 1, 0, 0, 0, 2, 1]
8  | def      | [1, 0, 0, 0, 1, 1, 1, 1, 0]

Chciałbym wybrać wektory związane z danym {x0}} i utwórz nowy wektor kruszywa, który podsumuje każdy odpowiedni wektor przez jego index

Przykładowy wynik dla zapytania z house_id abc byłoby idealnie wyglądać:

house_id | aggregate_room_data
--------------------------------
abc      | [3, 4, 4, 2, 2, 3, 2]

I przykład wynika do zapytania z house_id def:

house_id | aggregate_room_data
--------------------------------------
def      | [3, 2, 2, 2, 1, 1, 1, 3, 1]

Wierzę, że potrzebuję jakieś kombinację ARRAY_AGG, CROSS JOIN UNNEST, SUM, SUM i może WITH OFFSET, ale jestem manekinem i po prostu nie mogę zdobyć znacznej składni, chociaż ja Myślisz, że tu kręgnę odpowiedzi tutaj.

Z góry dziękuję za wszelką pomoc

1
Dave Kiss 27 październik 2020, 23:22

1 odpowiedź

Najlepsza odpowiedź

Poniżej znajduje się opis BigQuery Standard SQL

#standardSQL
select house_id, 
  array_agg(data order by offset) as aggregate_room_data
from (
  select house_id, offset, sum(data) data
  from `project.dataset.table`, 
  unnest(room_data) data with offset 
  where not room_data is null
  group by house_id, offset
)
group by house_id

Jeśli zastosujesz się do przykładowych danych z twojego pytania - wynik to

enter image description here

2
Mikhail Berlyant 27 październik 2020, 21:48