?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
窗口函數(shù)提供跨的行相關(guān)的當(dāng)前查詢行集執(zhí)行計(jì)算的能力。 見Section 3.5關(guān)于此功能的介紹。
Table 9-44列出了內(nèi)建的窗口函數(shù)。注意必須使用窗口函數(shù)的語法調(diào)用這些函數(shù); 一個(gè)OVER子句是必需的。
除了這些函數(shù)外,任何內(nèi)建的或用戶定義的聚合函數(shù)都可以作為窗口函數(shù)(見Section 9.18關(guān)于內(nèi)建聚合函數(shù)的列表)。 僅當(dāng)調(diào)用跟著OVER子句的聚合函數(shù),作為窗口函數(shù);否則它們作為常規(guī)的聚合。
Table 9-44. General-Purpose Window Functions
函數(shù) | 返回類型 | 描述 |
---|---|---|
row_number()
|
bigint | 在其分區(qū)中的當(dāng)前行號(hào),從1計(jì) |
rank()
|
bigint | 有間隔的當(dāng)前行排名; 與row_number 同行之首相同 |
dense_rank()
|
bigint | 沒有間隔的當(dāng)前行排名; 這個(gè)函數(shù)計(jì)數(shù)對(duì)等組。 |
percent_rank()
|
double precision | 當(dāng)前行的相對(duì)排名: (rank - 1) / (總行數(shù) - 1) |
cume_dist()
|
double precision | 當(dāng)前行的相對(duì)排名: (前面的行數(shù) 或 與當(dāng)前行同行)/(總行數(shù)) |
ntile(num_bucketsinteger)
|
integer | 從1到參數(shù)值的整數(shù)范圍,劃分盡可能相等段。 |
lag(valueany
[,offsetinteger
[,defaultany]])
|
類型同value | 返回當(dāng)前行的前offset行,value 的同一字段值。如果沒有這樣的行,返回default替代。 offset和default 都是當(dāng)前行計(jì)算的結(jié)果。如果忽略了,則offset默認(rèn)是1, default默認(rèn)是 null。 |
lead(valueany
[,offsetinteger
[,defaultany]])
|
類型同value | 返回當(dāng)前行的后offset行,value 的同一字段值。如果沒有這樣的行,返回default替代。 offset和default 都是當(dāng)前行計(jì)算的結(jié)果。如果忽略了,則offset默認(rèn)是1, default默認(rèn)是 null。 |
first_value(valueany)
|
類型同value | 返回窗口第一行的value字段值。 |
last_value(valueany)
|
類型同value | 返回窗口最后一行的value字段值。 |
nth_value(valueany,nthinteger)
|
類型同value | 返回窗口第nth行的value 字段值(行從1計(jì)數(shù));沒有這樣的行則 null。 |
在Table 9-44列出所有基于關(guān)聯(lián)窗口定義ORDER BY指定排序子句的函數(shù)。 同行是說在ORDER BY排序時(shí)不唯一的行。定義的這四個(gè)排名函數(shù),對(duì)于任何兩個(gè)同行的答案相同。
注意first_value
,last_value
,和nth_value
只考慮內(nèi)"window frame",其默認(rèn)情況下,包含從分區(qū)的開始行直到當(dāng)前行的最后同行。
像last_value
和nth_value
有時(shí)會(huì)給出沒有用的結(jié)果。
You can redefine the frame by
adding a suitable frame specification (RANGEor
ROWS) to theOVERclause.
SeeSection 4.2.8for more information
about frame specifications.
當(dāng)一個(gè)聚合函數(shù)作為窗口函數(shù)使用時(shí),將聚合超過當(dāng)前行的窗框內(nèi)的行。 一個(gè)使用ORDER BY和默認(rèn)窗框定義處理"運(yùn)行時(shí)求和"類型的行為, 可能不是想要的結(jié)果。為了獲取超過整個(gè)分區(qū)聚合,忽略ORDER BY或者使用 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING。 其它窗框規(guī)格可以用來獲取其它的效果。
Note: SQL 標(biāo)準(zhǔn)為
lead
,lag
,first_value
,last_value
和nth_value
定義了 一個(gè)RESPECT NULLS或IGNORE NULLS可選項(xiàng)。 在PostgreSQL沒有實(shí)現(xiàn):行為總是與標(biāo)準(zhǔn)默認(rèn)相同,即RESPECT NULLS。 同樣用于nth_value
的標(biāo)準(zhǔn)FROM FIRST或FROM LAST選項(xiàng)沒有實(shí)現(xiàn): 只有支持默認(rèn)FROM FIRST行為。(你可以通過ORDER BY排序取反獲取到FROM LAST的結(jié)果。)