小编典典

如何在AWS Redshift数据库中获取过滤器的子字符串和group by子句

sql

如何从包含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
.....

因此需要根据各个类别对结果进行分组。


阅读 208

收藏
2021-04-14

共1个答案

小编典典

@ 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,它告诉我们在字符串中找到特定模式的次数。

2021-04-14