Redshift SQL - 反向 Listagg 函数
Posted
技术标签:
【中文标题】Redshift SQL - 反向 Listagg 函数【英文标题】:Redshift SQL - Reverse Listagg function 【发布时间】:2020-04-15 00:24:59 【问题描述】:假设我有一个如下表:
Name Order
AA 1,2
BB 2,3
我希望我的结果是这样的:
Name Order
AA 1
AA 2
BB 2
BB 3
如何在 Redshift 中实现这一点?
谢谢!
【问题讨论】:
订单列的数据类型是什么? @zealous 假设它是字符串(如实际订单号 A1、A2、A3) 【参考方案1】:假设您事先知道每个分隔列表的最大元素数,您可以使用数字表和split_part()
:
select t.name, split_part(t.order, ',', n.n) val
from (
select 1 n
union all select 2
union all select 3
) n
inner join mytable t
on n.n <= regexp_count(t.order, ',') + 1
您可以根据需要使用更多数字扩展派生表n
。也可以对大表使用row_number()
来生成数字表。
【讨论】:
谢谢!但是我没有关注那里的子查询 n,以及那里的 regexp_count 的目的。你能解释一下吗? 它基本上是将数据连接到包含计数的表中,然后使用它来选择拆分项目的一部分。这有点作弊,因为这不是创建 SQL 的目的,但它确实有效。以上是关于Redshift SQL - 反向 Listagg 函数的主要内容,如果未能解决你的问题,请参考以下文章