gpt4 book ai didi

google-cloud-platform - 如何在 BigQuery 中分组为结构?

转载 作者:行者123 更新时间:2023-12-05 02:14:12 25 4
gpt4 key购买 nike

我有以下数据:

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}

级别列始终来自 {1, 2, 3} 的集合,但某些级别可能缺失(空)

到目前为止,我得到的是按 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

最佳答案

这将返回预期的结果:

WITH Players AS (
SELECT 1 AS player_id, 1 AS level, 'a' AS talent_id UNION ALL
SELECT 1, 2, 'b' UNION ALL
SELECT 1, 3, 'c' UNION ALL
SELECT 2, 1, 'd' UNION ALL
SELECT 2, 2, 'e'
)
SELECT
player_id,
STRUCT(
MAX(IF(level = 1, talent_id, NULL)) AS _1,
MAX(IF(level = 2, talent_id, NULL)) AS _2,
MAX(IF(level = 3, talent_id, NULL)) AS _3) AS data
FROM Players
GROUP BY player_id

此处的技术称为旋转(将行转换为列)。

关于google-cloud-platform - 如何在 BigQuery 中分组为结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53888454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com