日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)OceanBase教程:OceanBase窗口函數(shù)說(shuō)明

分析函數(shù)(也叫窗口函數(shù))與聚合函數(shù),都是對(duì)行集組(一組行的集合)進(jìn)行聚合計(jì)算,不同的是,聚合函數(shù)每組只能返回一個(gè)值(一行),而窗口函數(shù)每組可以返回多個(gè)值(多行)。行集組又稱(chēng)為窗口(Window),由 analytic_clause 定義。而窗口大小取決于實(shí)際的行數(shù)或邏輯間隔(例如時(shí)間)。組內(nèi)每一行都是基于窗口的邏輯計(jì)算的結(jié)果。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到鄲城網(wǎng)站設(shè)計(jì)與鄲城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋鄲城地區(qū)。

觸發(fā)一個(gè)分析函數(shù)需要特殊的關(guān)鍵字 OVER 來(lái)指定窗口。一個(gè)窗口包含三個(gè)組成部分:

  • 分區(qū)規(guī)范,用于將輸入行分裂到不同的分區(qū)中。這個(gè)過(guò)程和 GROUP BY 子句的分裂過(guò)程相似。

  • 排序規(guī)范,用于決定輸入數(shù)據(jù)行在窗口函數(shù)中執(zhí)行的順序。

  • 窗口邊界,指定計(jì)算數(shù)據(jù)的窗口邊界。默認(rèn)值為 RANGE UNBOUNDED PRECEDING 。這個(gè)邊界包含當(dāng)前分區(qū)中所有從開(kāi)始到目前行所有數(shù)據(jù)。

分析函數(shù)是查詢中執(zhí)行的最后一組操作,除了最后的 ORDER BY 子句。在處理窗口函數(shù)之前,必須完成所有 JOIN 以及 WHERE、GROUP BY 和 HAVING 子句。因此,窗口函數(shù)只能出現(xiàn)在選擇列表或 ORDER BY 子句中。

分析函數(shù)通常用于計(jì)算累積、移動(dòng)、居中和報(bào)告匯總。

語(yǔ)法

analytic_function


analytic_function([ arguments ]) OVER (analytic_clause)

analytic_clause


[ query_partition_clause ] [ order_by_clause [ windowing_clause ] ]

query_partition_clause


PARTITION BY { expr[, expr ]... | ( expr[, expr ]... ) }

order_by_clause


ORDER [ SIBLINGS ] BY{ expr | position | c_alias } [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] [, { expr | position | c_alias } [ ASC | DESC ][ NULLS FIRST | NULLS LAST ]]...

windowing_clause


{ ROWS | RANGE } { BETWEEN { UNBOUNDED PRECEDING | CURRENT ROW | value_expr { PRECEDING | FOLLOWING } } AND{ UNBOUNDED FOLLOWING | CURRENT ROW | value_expr { PRECEDING | FOLLOWING } } | { UNBOUNDED PRECEDING | CURRENT ROW| value_expr PRECEDING}}

在以下各節(jié)中將討論此語(yǔ)法的語(yǔ)義。

analytic_function

分析函數(shù)(analytic_function)指定了分析函數(shù)的名稱(chēng)。

arguments

參數(shù)(arguments),分析函數(shù)采用 0~3 個(gè)參數(shù)。參數(shù)可以是任何數(shù)字?jǐn)?shù)據(jù)類(lèi)型或可以隱式轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)類(lèi)型的任何非數(shù)字?jǐn)?shù)據(jù)類(lèi)型。OceanBase 根據(jù)數(shù)據(jù)類(lèi)型優(yōu)先級(jí)確定具有最高數(shù)值優(yōu)先級(jí)的參數(shù),然后將其余參數(shù)隱式轉(zhuǎn)換為這個(gè)具有最高數(shù)值優(yōu)先級(jí)參數(shù)的數(shù)據(jù)類(lèi)型。返回類(lèi)型也是具有最高數(shù)值優(yōu)先級(jí)參數(shù)的數(shù)據(jù)類(lèi)型,除非對(duì)單個(gè)函數(shù)另有說(shuō)明。

analytic_clause

分析子句(analytic_clause),使用 OVER analytic_clause 指示函數(shù)在查詢結(jié)果集上操作。此子句在 FROM、WHEREGROUP BY 和 HAVING 子句之后計(jì)算。您可以在選擇列表或按子句順序中用此子句指定分析函數(shù)。若要篩選基于分析函數(shù)的查詢結(jié)果,請(qǐng)將這些函數(shù)嵌套在父查詢中,然后篩選嵌套子查詢的結(jié)果。


注意 

  • 您不能通過(guò)在分析子句中指定分析函數(shù)來(lái)嵌套分析函數(shù)。但是您可以在子查詢中指定分析函數(shù),并在其上計(jì)算另一個(gè)分析函數(shù)。

  • 您可以使用用戶定義的解析函數(shù)以及內(nèi)置的解析函數(shù)指定 analytic_clause。

query_partition_clause

分區(qū)子句(query_partition_clause),使用 PARTITION BY 子句將查詢結(jié)果集劃分為基于一個(gè)或多個(gè) value_expr 的組。如果省略此子句,則函數(shù)將查詢結(jié)果集的所有行視為單個(gè)組。

您可以在同一查詢中指定多個(gè)分析函數(shù),每個(gè)函數(shù)通過(guò)鍵具有相同或不同的分區(qū)。如果您用 query_partition_clause 指定了一個(gè)分析函數(shù),并且被查詢的對(duì)象具有并行屬性,那么函數(shù)計(jì)算也是并行化的。

value_expr 的有效值是常量、列、非分析函數(shù)、函數(shù)表達(dá)式或涉及其中任何一個(gè)的表達(dá)式。

order_by_clause

使用排序子句 order_by_clause 指定如何在分區(qū)內(nèi)對(duì)數(shù)據(jù)進(jìn)行排序。 對(duì)于所有分析函數(shù),您可以在多個(gè)鍵上的分區(qū)中對(duì)值進(jìn)行排序,每個(gè)鍵由 value_expr 定義,由排序序列限定。

在每個(gè)函數(shù)中,您可以指定多個(gè)排序表達(dá)式。當(dāng)使用對(duì)值進(jìn)行排序的函數(shù)時(shí),這樣做特別有用。

當(dāng) order_by_clause 對(duì)多行產(chǎn)生相同的值時(shí),函數(shù)的行為如下:

  • CUME_DIST、DENSE_RANKNTILE、PERCENT_RANK 和 RANK 為每一行返回相同的結(jié)果。

  • 即使有一個(gè)基于 order_by_clause 的值,ROW_NUMBER 也會(huì)為每一行分配一個(gè)不同的值。該值基于行處理的順序,如果 ORDER BY 不能實(shí)現(xiàn)總排序,則該順序可能是不確定的。

  • 對(duì)于其他分析函數(shù),它的結(jié)果取決于窗口規(guī)則。如果您指定了一個(gè)帶有 RANGE 關(guān)鍵字的邏輯窗口,則函數(shù)將為每個(gè)行返回相同的結(jié)果。如果您用 ROWS 關(guān)鍵字指定了物理窗口,則結(jié)果是不確定的。

ORDER BY 子句的限制

使用 ORDER BY 子句會(huì)受到以下限制:

  • 在分析函數(shù)中,order_by_clause 必須使用表達(dá)式(expr)。SIBLINGS 關(guān)鍵字無(wú)效(僅與分層查詢中相關(guān))。位置(position)和列別名(c_alias)也無(wú)效。否則,該 order_by_clause 與整個(gè)查詢或子查詢的排序命令相同。

  • 使用 RANGE 關(guān)鍵字的分析函數(shù)可以在其函數(shù)的 ORDER BY 子句中使用多個(gè)排序鍵。您需要指定以下窗口:

  • RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,簡(jiǎn)稱(chēng) RANGE UNBOUNDED PRECEDING。

  • RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING

  • RANGE BETWEEN CURRENT ROW AND CURRENT ROW

  • RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

除了這四個(gè)之外,窗口邊界只能在分析函數(shù)的 ORDER BY 子句中有一個(gè)排序鍵。 此限制不適用于 ROW 關(guān)鍵字指定的窗口邊界。

ASC 或 DESC 關(guān)鍵字

指定排序序列,ASC 指升序,DESC 指降序。默認(rèn)為升序(ASC)。

NULLS FIRST 或 NULLS LAST 關(guān)鍵字

order_by_clause 中的 nulls first 和 nulls last, nulls first 表示排序時(shí)NULL值作為最小值處理,而 nulls last 表示排序時(shí)NULL值作為最大值處理。

windowing_clause

窗口函數(shù)子句(windowing_clause)有一些分析函數(shù)可以使用 windowing_clause。相關(guān)的關(guān)鍵字如下。

ROWS 或 RANGE 關(guān)鍵字

這些關(guān)鍵字為每一行定義一個(gè)用于計(jì)算函數(shù)結(jié)果的窗口,然后將該函數(shù)應(yīng)用于窗口中的所有行。窗口從上到下通過(guò)查詢結(jié)果集或分區(qū)移動(dòng)。窗口也稱(chēng)為 FRAME,OceanBase 同時(shí)支持以下窗口語(yǔ)句:

  • ROWS:以物理單位(行)指定窗口。

  • RANGE:將窗口指定為邏輯偏移量。默認(rèn)方式是 RANGE UNBOUNDED PRECEDING。您可以在分析函數(shù)中使用窗口函數(shù),而要使用 windowing_clause,就必須添加 order_by_clause。

windowing_clause 若由 RANGE 子句定義窗口邊界,那么在 order_by_clause 中您只能指定一個(gè)表達(dá)式。請(qǐng)參閱ORDER BY 子句的限制。具有邏輯偏移的分析函數(shù)返回的值總是確定性的。但是具有物理偏移量的分析函數(shù)返回的值可能會(huì)產(chǎn)生不確定的結(jié)果。排序表達(dá)式返回唯一的排序才能使具有物理偏移量的分析函數(shù)返回確定的值,因此,您必須在 order_by_clause 中指定多個(gè)列實(shí)現(xiàn)唯一的排序。

BETWEEN ... AND 關(guān)鍵字

使用 BETWEEN ... AND 子句指定窗口的起點(diǎn)和終點(diǎn)。第一個(gè)表達(dá)式(AND 之前)定義起點(diǎn),第二個(gè)表達(dá)式(AND 之后)定義終點(diǎn)。 如果省略 BETWEEN 并僅指定一個(gè)終點(diǎn),則 OceanBase 將其視為起點(diǎn),并且終點(diǎn)默認(rèn)為當(dāng)前行。

UNBOUNDED PRECEDING 關(guān)鍵字

UNBOUNDED PRECEDING 指示窗口從分區(qū)的第一行開(kāi)始。這是起點(diǎn),不是終點(diǎn)。

UNBOUNDED FOLLOWING 關(guān)鍵字

UNBOUNDED FOLLOWING 表示窗口在分區(qū)的最后一行結(jié)束。這是終點(diǎn),不是起點(diǎn)。

CURRENT ROW 關(guān)鍵字

作為起點(diǎn),CURRENT ROW 指定了窗口從當(dāng)前行或當(dāng)前值開(kāi)始(取決于分別指定了 ROW 還是 RANGE)。在這種情況下,端點(diǎn)不能為 value_expr PRECEDING。 作為終點(diǎn),CURRENT ROW 指定窗口在當(dāng)前行或值處結(jié)束(分別取決于您是否指定了 ROW 或 RANGE)。在這種情況下,起點(diǎn)不能為 value_expr FOLLOWING

value_expr PRECEDING 或 value_expr FOLLOWING 關(guān)鍵字

  • 如果 value_expr FOLLOWING 是起點(diǎn),則終點(diǎn)必須是 value_expr FOLLOWING。

  • 如果 value_expr PRECEDING 是終點(diǎn),則起點(diǎn)必須是 value_expr PRECEDING。

如果要定義由時(shí)間間隔定義的數(shù)值格式的邏輯窗口,則可能需要使用轉(zhuǎn)換函數(shù)。

如果您指定 ROWS

  • value_expr 是物理偏移量。則它必須是一個(gè)常數(shù)或表達(dá)式,并且必須計(jì)算為正數(shù)。

  • 如果 value_expr 是起點(diǎn)的一部分,則它必須把起點(diǎn)與終點(diǎn)之前的部分當(dāng)作一行計(jì)算。

如果您指定 RANGE

  • value_expr 是邏輯偏移量。它必須是一個(gè)常數(shù)或表達(dá)式,其結(jié)果為正數(shù)值或間隔字面量。

  • 您只能在 order_by_clause 中指定一個(gè)表達(dá)式。

  • 如果 value_expr 為數(shù)值,則 ORDER BY expr 必須為數(shù)值或 DATE 數(shù)據(jù)類(lèi)型。

  • 如果 value_expr 為間隔值,則 ORDER BY expr 必須為 DATE 數(shù)據(jù)類(lèi)型。如果您完全省略 windowing_clause,則默認(rèn)值為 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW


本文名稱(chēng):創(chuàng)新互聯(lián)OceanBase教程:OceanBase窗口函數(shù)說(shuō)明
網(wǎng)頁(yè)網(wǎng)址:http://m.5511xx.com/article/cdchegh.html