咱们已知 在sql中子查询能够配合 in 或者 exists 来使用,可是如何把子查询的结果传给函数呢?sql
场景:数组
咱们有一个 省份表 数据以下:函数
id province字符串
1 广东table
2 福建class
3 江西select
有一个分隔符表 数据以下:数据
seperator查询
,tab
-
...
+
要达到的目标是:一条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;
达到了“把结果转为数组传给函数使用”的效果。