咱們已知 在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;
達到了「把結果轉爲數組傳給函數使用」的效果。