我們已知 在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;
達到了“把結果轉為數組傳給函數使用”的效果。