麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-用戶手冊-19. SQL命令-CREATE AGGREGATE

2019-09-08 23:33:02
字體:
來源:轉載
供稿:網友
CREATE AGGREGATE
名稱
CREATE AGGREGATE ― 定義一個新的聚集函數 

語法
CREATE AGGREGATE name ( BASETYPE = input_data_type
    [ , SFUNC1 = sfunc1, STYPE1 = state1_type ]
    [ , SFUNC2 = sfunc2, STYPE2 = state2_type ]
    [ , FINALFUNC = ffunc ]
    [ , INITCOND1 = initial_condition1 ]
    [ , INITCOND2 = initial_condition2 ] )
輸入
name 
要創建的聚集函數名. 
input_data_type 
本聚集函數要處理的基本數據類型. 
sfunc1 
用于處理源數據列里的每一個非空(non-NULL)數據的狀態轉換函數.它必須是一個兩個參數的函數,第一個參數的類型是 state1_type 而第二個參數的類型是 input_data_type.此函數必須返回一個類型為 state1_type 的值.這個函數接受當前狀態值 1 和當前輸入數據條目,而返回下個狀態值 1. 
state1_type 
聚集的第一個狀態值的數據類型. 
sfunc2 
用于處理源數據列里的每一個非空(non-NULL)數據的狀態轉換函數.它是一個單個參數的函數,參數的類型是 state2_type,返回相同的類型.這個函數接受當前狀態值 2 和當前輸入數據條目,而返回下個狀態值 2. 
state2_type 
聚集的第二個狀態值的類型. 
ffunc 
在轉換完所有輸入域/字段后調用的最終處理函數.如果兩個狀態值都使用了,最終處理函數必須以兩個類型分別為 state1_type 和 state2_type 的數做參數.如果只使用了一個狀態值,最終處理函數必須以一個該狀態值的類型的數為參數.聚集的輸出數據類型被定義為此函數的返回類型. 
initial_condition1 
狀態值 1 的初始值. 
initial_condition2 
狀態值 2 的初始值. 
輸出
CREATE 
命令執行成功的返回信息. 

描述
CREATE AGGREGATE 允許用戶或程序員通過定義新的聚集函數來擴展 Postgres 的功能.一些用于基本類型的聚集函數如 min(int4) 和 avg(float8) 等已經包含在軟件里.如果你需要定義一個新類型或需要一個還沒有提供的聚集函數,這時便可用CREATE AGGREGATE 來提供我們所需要的特性. 
一個聚集函數是用它的名字和輸入數據類型來標識的.如果兩個聚集的輸入數據不同,它們可以有相同的名字.要避免沖突,不要寫一個與聚集同名而且輸入函數也相同的普通函數. 

一個聚集函數是由一到三個普通函數做成的:兩個狀態轉換函數,sfunc1 和 sfunc2,和一個最終計算函數,ffunc.它們是這樣使用的: 

sfunc1( internal-state1, next-data-item ) ---> next-internal-state1
sfunc2( internal-state2 ) ---> next-internal-state2
ffunc(internal-state1, internal-state2) ---> aggregate-value
Postgres 創建一個或兩個臨時變量(數據類型是 stype1 和/或 stype2)用于保存被轉換函數作為參數的中間結果.對于每個輸入數據條目,都調用狀態轉換函數計算內部狀態值的新數值.在處理完所有數據后,調用一次最終處理函數以計算聚集的輸出值. 
如果兩個轉換函數都聲明了,那么必須聲明 ffunc.如果只聲明了一個轉換函數,那么ffunc 是可選的.在沒有提供 ffunc 時的缺省動作是返回所使用的內部狀態值的最后的值(因此,聚集的輸出類型于狀態值的類型相同). 

一個聚集函數還可能提供一到兩個初始條件,也就是說,所用的該內部狀態值的初始值.這些值是做為類型 text 的數據域存儲在數據庫里的,不過它們必須是狀態值數據類型的有效外部表現形式的常量.如果聲明了 sfunc1 而沒有聲明 initcond1 值,那么系統不會對第一個輸入條目調用l sfunc1;取而代之的是,用第一個輸入條目初始化內部狀態值 1,而從第二個輸入條目的開始調用 sfunc1.這樣對于象 MIN 和 MAX 這樣的函數是很有用的.請注意一個使用這個特性的聚集在沒有輸入值時將返回 NULL.對狀態值 2 沒有類似的準備;如果聲明了 sfunc2,那么需要一個 initcond2. 

注意
使用 DROP AGGREGATE 刪除聚集函數. 
CREATE AGGREGATE 的參數可以以任何順序書寫,而不只是上面顯示的順序. 

聲明的聚集函數有可能有各種各樣不同的狀態和終處理函數組成.比如,count 聚集需要 Ssfunc2 (一個遞增函數)但不需要 sfunc1 或 ffunc,而 sum 聚集需要 sfunc1 (一個累加函數)但不需要 sfunc2 或 ffunc 而 avg 聚集需要上面所有狀態函數和一個 ffunc (一個除法函數)來計算結果.在任何情況下,至少要定義一個狀態函數,而且任何 sfunc2 都有一個對應的 initcond2.

用法
請參考 PostgreSQL 程序員手冊 聚集函數章節的聚集函數部分獲取完整的例子. 
 
兼容性
SQL92
CREATE AGGREGATE 是 Postgres 語言的擴展.在 SQL92 里沒有 CREATE AGGREGATE .
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久久成人一区二区免费影院 | 久久九九热re6这里有精品 | 欧美日韩免费观看视频 | 制服丝袜日日夜夜 | 精品国产一区二区三区久久久蜜月 | 久久精品国产精品亚洲 | 久产久精品 | 91久久国产综合久久91猫猫 | 国产一区精品在线观看 | av不卡免费观看 | 国产精品美女久久久免费 | 国产精品www| www.成人在线视频 | 91久久久久久亚洲精品禁果 | 欧美精品一区二区三区四区 | 亚洲乱码精品久久久久 | 久久久www视频 | 日韩中文字幕一区二区三区 | 日本欧美一区 | 亚洲国产美女视频 | 男女羞羞视频在线免费观看 | 中国美女一级黄色片 | 久久精品视频国产 | 精品久久久久久久久久久久 | 鲁人人人鲁人人鲁精品 | 少妇av片| 成人在线免费看 | 国产在线中文 | 国产成人高潮免费观看精品 | 91午夜视频 | 第四色成人网 | 天天看成人免费毛片视频 | 成人不卡免费视频 | 亚洲精品xxx| www.777含羞草 | 色婷婷a v| 性猛交ⅹxxx乱巴西 在线播放中文 | 久久综合久久综合久久综合 | 国产精品99久久免费观看 | 国产亚洲精品久久久久久久久 | 欧美一级三级在线观看 |