如何返回包含列元胞数组中特定值的行?
想象一下我们有一个像这样的表:
id name phone values
1 Taylor xxx.xxx.xxxx [4,6,5]
2 John yyy.yyy.yyyy [1,5,2]
3 Peter zzz.zzz.zzzz [6,2,6]
Run Code Online (Sandbox Code Playgroud)
我需要创建一个 SQL 查询,该查询将返回数组中存在值“6”的行values
。所以预期的输出是:
id name phone values
1 Taylor xxx.xxx.xxxx [4,6,5]
3 Peter zzz.zzz.zzzz [6,2,6]
Run Code Online (Sandbox Code Playgroud)
我们正在 Redshift 中工作。json_extract_array_element_text('json_string', pos)
因此,如果更容易的话,可以使用该功能的可能性。请注意,值数组的长度可能彼此不同。
我会试一下 :
首先使用此查询查找values
您的字段中最长数组的最大长度SampleTable
:
SELECT MAX(JSON_ARRAY_LENGTH(values)) FROM SampleTable;
Run Code Online (Sandbox Code Playgroud)
然后根据您从上面查询得到的结果使用以下格式创建一个视图(我假设最大大小输出为 2,索引从 0 开始,根据您提供的示例表数据):
CREATE VIEW seq_0_to_2 AS (
SELECT 0 AS i UNION ALL
SELECT 1 UNION ALL
SELECT 2
);
Run Code Online (Sandbox Code Playgroud)
然后使用以下查询来获取所需的结果:
WITH exploded_array AS (
SELECT id,name,phone, JSON_EXTRACT_ARRAY_ELEMENT_TEXT(values, seq.i) AS NewExtractedValues
FROM SampleTable, seq_0_to_2 AS seq
WHERE seq.i < JSON_ARRAY_LENGTH(values)
)
SELECT *
FROM exploded_array
where NewExtractedValues = 6;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
灵感来自https://torsten.io/stdout/expanding-json-arrays-to-rows/
归档时间: |
|
查看次数: |
4382 次 |
最近记录: |