У меня есть следующие данные:
player_id level talent_id
1 1 a
1 2 b
1 3 c
2 1 d
2 2 e
И я хочу сгруппировать по player_id и иметь строки в виде структур, со значениями level
в качестве имен структурных полей:
player_id data
1 {_1 = a, _2 = b, _3 = c}
2 {_1 = d, _2 = e, _3 = null}
theСтолбец уровня всегда из набора {1, 2, 3}, но некоторые уровни могут отсутствовать (null)
До сих пор я получал агрегацию по player_id и с прикрепленным массивом результатов:
talents as (
select
p.player_id,
array_agg(struct(p.level, p.talent_id)) as talents
from source.player_talent p
group by player_id
),
player_id data
1 [{1, a}, {2, b}, {3, c}]
2 {{1, d}, {2, e}]
теперь мне нужно сопоставить этот массив со структурой с фиксированными именами свойств _1
, _2
, _3