如何从包含AWS Redshift数据库中的filter和group by子句记录的列中获取子字符串。
我有记录,如表:
Table_Id | Categories | Value <ID> | ABC1; ABC1-1; XYZ | 10 <ID> | ABC1; ABC1-2; XYZ | 15 <ID> | XYZ | 5 .....
现在,我想根据“ ABC1”或“ ABC1和XYZ”等单个类别过滤记录
查询的预期输出将是:
Table_Id | Categories | Value <ID> | ABC1 | 25 <ID> | ABC1-1 | 10 <ID> | ABC1-2 | 15 <ID> | XYZ | 30 .....
因此需要根据各个类别对结果进行分组。
@ JonScott,@ AlexYes和其他在类似情况下挣扎的朋友。
除了@AlexYes所建议的方法外,我发现了其他更好的方法。
我所做的是,我将结果列扁平化,这会产生单个记录。我可以进一步处理。
询问:
select row_number() over(order by 1) as r1, to_char(timestamptz 'epoch' + date_time * interval '1 second', 'yyyy-mm-dd') AS DAY, split_part(categories, ';', numbers.n) as catg, value from <TABLE> join numbers on numbers.n <= regexp_count(category_string, ';') + 1 <OTHER_CONDITIONS>
解释:
这里有两个有用的函数:首先,split_part函数将一个字符串分割为’;’。分隔符,并返回从拆分字符串指定的第一个,第二个,…,第n个值;第二个是regexp_count,它告诉我们在字符串中找到特定模式的次数。