我们已知 在sql中子查询可以配合  in 或者 exists 来使用,但是如何把子查询的结果传给函数呢?

 

场景:

我们有一个  省份表  数据如下:

id   province

1    广东

2   福建

3   江西

有一个分隔符表  数据如下:

seperator

,

-

...

+

 

 

要达到的目标是:一条sql实现省份按不同的分隔符做拼接。

需要结果:
广东,福建,江西
广东-福建-江西
广东...福建...江西
广东+福建+江西

我们先一条sql查出省份的顺序:

select province from province_table;

我们的按分隔符拼接字符串用array_join  sql:

select array_join(['广东','福建','江西'],seperator) from seperator_table;

 

但是我们不能直接把sql1作为array_join 的参数1传入,

原因是函数里面传如子查询,等价于传入 子查询查出来 第一行第一个数据。

 

所有我们借助 array_agg函数,该函数为聚合函数,可以把传如的结果都聚合为一个数组:

select array_agg(province) from province_table;

结果为:(结果为一行一列)

['广东','福建','江西']

 

于是,我们最后的实现方式就可以是:

select array_join((select array_agg(province) from province_table),seperator) from seperator_table;

达到了“把结果转为数组传给函数使用”的效果。

 posted on 2019-01-10 16:53  南宫千寻  阅读(5025)  评论(0编辑  收藏  举报