presto 函數中使用子查詢

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

達到了「把結果轉爲數組傳給函數使用」的效果。

相關文章
相關標籤/搜索