【发布时间】:2021-01-04 22:14:03
【问题描述】:
我想根据与id 关联的所有值过滤聚合数组。值是字符串,可以是all-x:y、x:y 和空三种类型(这里x 和y 是值的任意子字符串)。
我有几个条件:
- 如果
id具有x:y,则结果应包含x:y。 - 如果
idalways 有all-x:y,那么生成的聚合应该有all-x:y - 如果
idsometimes 有all-x:y,那么生成的聚合应该有x:y
例如下面的
WITH
my_table(id, my_values) AS (
VALUES
(1, ['all-a','all-b']),
(2, ['all-c','b']),
(3, ['a','b','c']),
(1, ['all-a']),
(2, []),
(3, ['all-c']),
),
结果应该是:
(1, ['all-a','b']),
(2, ['c','b']),
(3, ['a','b','c']),
我已经为此工作了多个小时,但似乎不可行。
我想出了以下方法,但感觉它无法正常工作,因为我可以检查all-x 是否存在于<<IN ALL>> 中的所有数组中:
SELECT
id,
SET_UNION(
CASE
WHEN SPLIT_PART(my_table.values,'-',1) = 'all' THEN
CASE
WHEN <<my_table.values IN ALL>> THEN my_table.values
ELSE REPLACE(my_table.values,'all-')
END
ELSE my_table.values
END
) AS values
FROM my_table
GROUP BY 1
我需要检查特定id 的所有数组values 是否包含all-x,这就是我努力寻找解决方案的地方。
我试图合作
经过几个小时的搜索,我开始相信这是不可行的。 任何帮助表示赞赏。感谢您的阅读。
【问题讨论】: