【发布时间】:2015-06-23 12:46:41
【问题描述】:
我想知道下面描述的问题是否有更好(即执行速度更快)的解决方案。
步骤 1)
create table t (k number, v1 number, v2 number);
insert into t values (1,1,1);
insert into t values (1,2,2);
insert into t values (1,2,3);
insert into t values (1,3,3);
insert into t values (1,4,3);
insert into t values (2,7,8);
insert into t values (2,7,9);
第 2 步)
我想返回以下数据集
(k, v1_list, v2_list)
1, (1,2,3,4), (1,2,3)
2, (7), (8,9)
步骤 3)
我可以通过运行 listagg() 的多重组合来解决它,我想知道它是否可以通过另一种方式实现。 在此示例中,我处理 2 个属性,但实际上我必须为数百个列表运行类似的语句。如下所示的查询可能会变得很麻烦。我想知道它是否可以在一个查询中完成,可能使用 listagg() 多次?
with q1 as (
select distinct k, listagg (v1, ', ') within group (order by k) over (partition by k) v1_list
from t
group by k, v1),
q2 as (
select distinct k, listagg (v2, ', ') within group (order by k) over (partition by k) v2_list
from t
group by k, v2)
--
select distinct t.k, v1_list, v2_list from t
--
join q1 on q1.k = t.k
join q2 on q2.k = t.k
感谢您的建议,
-- 卢卡斯
【问题讨论】:
标签: string oracle aggregate-functions string-concatenation listagg