我正在寻找一种方法,根据具有值映射的第二个数组的值从另一个数组创建数组。
例如 表 A 包含列
id
、some_array
我心里有一些价值映射,说,{'a': 1, 'b': 2, 'c': 3}
我想做一个选择来从 some_array
获取映射结果数组
所以,如果 A 是
| id | some_array |
|:---|:-----------|
| 1 | ['a', 'b'] |
| 2 | ['a', 'c'] |
我需要一个查询来生成以下内容
| id | parsed_array |
|:---|:-----------|
| 1 | [1, 2] |
| 2 | [1, 3 |
如何实现这个查询?
谢谢!
有多种方法可以执行此操作,例如,您可以创建一个包含映射数据的 CTE,将其与数据集交叉连接,然后将
transform
数组函数与 MAP
的 element_at
函数(返回 NULL
如果地图中不存在密钥)来映射数据:
-- sample data
WITH dataset(id, some_array) as (
values (1, array['a', 'b']),
(2, array['a', 'c'])
),
-- query parts
map_data(m) as (
values (map(
array['a', 'b', 'c'],
array[1, 2, 3]
))
)
select id,
transform(some_array, v -> element_at(m, v)) parsed_array
from dataset
cross join map_data;
输出:
id | 解析数组 |
---|---|
1 | [1, 2] |
2 | [1, 3] |