PostgreSQL實戰(12)高級特性

1、WITH 查詢

先通過一個簡單的 CTE 示例瞭解 WITH 查詢,如下所示:

WITH t as ( 
SELECT generate series(l,3) 
SELECT * FROM t; 

generate_series 
--------------------
        1
        2
        3
(3 rows) 

遞歸查詢使用 CTE:

WITH 查詢的 一個重要屬 性是 RECURSIVE ,使用 RECURSIVE 屬性可以引用自己的輸出,從而實現遞歸, 一般用於層次結構或樹狀結構的應用場景,一個簡單的RECURSIVE 例子如下所示

WITH recursive t (x) as ( 
SELECT 1 
UNION 
SELECT x + 1 
FROM t 
WHERE x < 5 
)
SELECT sum(x) FROM t; 
輸出結果爲
sum 
15 
(1 row) 

2、聚合函數

   string_agg 函數:此函數語法如下所示:

string_agg(expression , delimiter) 

簡單地說 string_agg 函數能將結果集某個字段的所有行連接成字符串,並用指定delimiter 分隔符分隔, expression 表示要處理的字符類型數據;參數的類型爲(text, te~t)或(bytea, bytea ,函數返 回的類型同輸入參數類型一致, by tea 屬於 進制類型,使用情況不多,我們主 介紹 text 類型輸入參數,一個例子:

mydb=> SELECT * FROM city; 
country  city 
------------+--- --- 
中國 | 臺北
中國 |香港
中國 |上海
日本 東京
日本 大阪
(5 rows) 

將city 段連接成 符串的代碼如下:

mydb=> SELECT str ng agg c 工 ty ,’,’) FROM city; 
string_agg 
臺北,香港,上海,東京,大阪
(1 r ow ) 

array_agg 函數:array_agg 函數和 string_agg 函數類似,主要的區別爲返回的類型爲 數組,數組數據類型同輸入 參數數據類型 一致, array_agg 函數支持兩種語 第一種如下

array_agg (expression ) 輸入參數爲任何非數組類型

輸入 數可以是任何非數組類型,返回的結果是一維數組 array_agg 函數將結果集某個字段的所有行連接成數組,例如執行以下 詢:

mydb=> SELECT coutry array_agg(city) FROM city GROUP BY country; 
country  array_agg 
-- + ------
日本 | {東京 大阪}
中國 | {臺北 香港 上海}

第二種 array_agg 語法如下所示:

array_agg (expression ) 輸入參數爲任何數組類型

返回類型爲多維數組:例如:

數據如下所示:
select * from test_aray;
id
-------------------------
{ 1, 2 ' 3} 
{ 4 ' 5 , 6} 
(2 rows) 
使用 array_agg 函數 如下
mydb=> SELECT array_ agg(id) FROM test_arra y3 ; 
array_agg 
{{1 , 2 , 3) , {4 , 5 ,6 }} 
(1 r ow ) 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章