presto 函數中使用子查詢


我們已知 在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;

達到了“把結果轉為數組傳給函數使用”的效果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM