Analitikus függvények

analitikus függvények egy sorcsoport alapján kiszámítják az aggregált értéket. Ezek különböznek az aggregált függvényektől, mivel több sort adnak vissza minden csoporthoz. A sorok csoportját ablaknak nevezzük, amelyet a analytic_clausehatároz meg. Minden sorhoz egy sor csúszó ablak van meghatározva. Az ablak meghatározza az aktuális sor számításainak elvégzéséhez használt sorok tartományát. Az ablakméretek fizikai sorok számán vagy logikai intervallumon, például időn alapulhatnak.

az analitikus függvények az utolsó lekérdezésben végrehajtott műveletek, kivéve a végleges ORDERBY záradékot. Minden csatlakozás és minden WHEREGROUPBY, és HAVING az analitikai funkciók feldolgozása előtt befejeződik. Ezért az analitikus funkciók csak a kiválasztott listában jelenhetnek meg, vagy a ORDERBY záradék.

az analitikus függvényeket általában kumulatív, mozgó, középre irányított és jelentési aggregátumok kiszámítására használják.

analytic_function::=

analitic_function leírása.gif következik

Az ábra leírása ” analytic_function.gif”

analytic_clause::=

az analytic_clause leírása.gif következik

Az ábra leírása ” analytic_clause.gif”

query_partition_clause::=

a query_partition_clause leírása.gif következik
Az ábra leírása ” query_partition_clause.gif”

order_by_clause::=

Order_by_clause leírása.gif következik

Az ábra leírása ” order_by_clause.gif”

windowing_clause:: =

Windowing_clause leírása.gif következik

Az ábra leírása ” windowing_clause.gif “

ennek a szintaxisnak a szemantikáját a következő szakaszok tárgyalják.

analytic_function

adja meg az analitikus függvény nevét (lásd az analitikus függvények felsorolását a szemantika e megbeszélését követően).

argumentumok

analitikus függvények 0-3 argumentumot tartalmaznak. Az argumentumok lehetnek bármilyen numerikus adattípus vagy bármilyen nem numerikus adattípus, amely implicit módon numerikus adattípusgá alakítható. Az Oracle a legnagyobb numerikus elsőbbséggel rendelkező argumentumot határozza meg, a fennmaradó argumentumokat pedig implicit módon alakítja át az adott adattípusra. A visszatérési típus az adattípus is, kivéve, ha az egyedi funkció másként van feltüntetve.

Lásd még:

“Numeric Precedence” for information on numeric precedence and Table 3-10, “Implicit Type Conversion Matrix” for more information on implicit conversion

analytic_clause

Use OVERanalytic_clause to indicate that the function operates on a query result set. This clause is computed after the FROMWHEREGROUPBY, and HAVING clauses. Ezzel a záradékkal megadhatja az analitikai funkciókat a select listában vagy a ORDERBY záradékban. Egy lekérdezés eredményeinek elemzési függvény alapján történő szűréséhez helyezze ezeket a függvényeket a szülő lekérdezésbe, majd szűrje le a beágyazott alkönyvtár eredményeit.

megjegyzések az analytic_clause-ról: a következő megjegyzések vonatkoznak a analytic_clause:

  • nem lehet analitikus funkciókat elhelyezni a analytic_clausebármely részének analitikus funkciójának megadásával. Azonban megadhat egy analitikus függvényt egy alkeretben, és kiszámíthat rajta egy másik analitikus függvényt.

  • megadhatja a OVERanalytic_clause a felhasználó által definiált analitikus függvényekkel, valamint a beépített analitikus funkciókkal. Lásd: funkció létrehozása.

query_partition_clause

használja a PARTITIONBY záradékot a lekérdezési eredmény egy vagy több value_expralapján csoportokra történő felosztásához. Ha kihagyja ezt a záradékot, akkor a funkció egyetlen csoportként kezeli a lekérdezési eredmény összes sorát.

a query_partition_clause analitikus függvény használatához használja a szintaxis felső ágát (zárójelek nélkül). Ha ezt a záradékot modell lekérdezésben (a model_column_clauses) vagy particionált külső csatlakozásban (a outer_join_clause) szeretné használni, használja a szintaxis alsó ágát (zárójelben).

ugyanabban a lekérdezésben több analitikai funkciót is megadhat, mindegyik azonos vagy eltérő PARTITIONBY kulcsokkal.

Ha a lekérdezett objektumok párhuzamos attribútummal rendelkeznek, és ha a query_partition_clause analitikus függvényt ad meg, akkor a függvényszámítások is párhuzamosak.

avalue_expr érvényes értékei állandók, oszlopok, nonanalitikus függvények, függvénykifejezések vagy ezek bármelyikét magában foglaló kifejezések.

order_by_clause

használja a order_by_clause az adatok partíción belüli megrendelésének megadásához. Az összes analitikus funkcióhoz több kulcson rendelheti meg az értékeket egy partícióban, mindegyiket egy value_expr határozza meg, és mindegyik rendelési sorrend szerint van besorolva.

Az egyes funkciókban több rendelési kifejezést is megadhat. Ez különösen akkor hasznos, ha olyan funkciókat használ, amelyek rangsorolják az értékeket, mert a második kifejezés megoldhatja az első kifejezés azonos értékei közötti kapcsolatokat.

Ha a order_by_clause több sor esetén azonos értékeket eredményez, a függvény a következőképpen viselkedik:

  • CUME_DISTDENSE_RANKNTILEPERCENT_RANK és RANK ugyanazt az eredményt adja vissza az egyes sorokhoz.

  • ROW_NUMBER minden sorhoz külön értéket rendel, még akkor is, ha a order_by_clausealapján döntetlen van. Az érték a sor feldolgozásának sorrendjén alapul, amely nem determinisztikus lehet, ha a ORDERBY nem garantálja a teljes megrendelést.

  • az összes többi analitikus függvény esetében az eredmény az ablak specifikációjától függ. HA Logikai ablakot ad meg a RANGE kulcsszóval, akkor a függvény ugyanazt az eredményt adja vissza minden sorhoz. Ha fizikai ablakot ad meg a ROWS kulcsszóval, akkor az eredmény nem determinisztikus.

a megrendelésre vonatkozó korlátozások a következő korlátozások vonatkoznak a ORDERBY záradékra:

  • analitikus funkció esetén aorder_by_clause kifejezésnek kell lennie (expr). A SIBLINGS kulcsszó nem érvényes (csak hierarchikus lekérdezésekben releváns). A pozíció (position) és az oszlop álnevek (c_alias) szintén érvénytelenek. Ellenkező esetben ez a order_by_clause ugyanaz, mint a teljes lekérdezés vagy alkönyvtár megrendelésére.

  • An analytic function that uses the RANGE keyword can use multiple sort keys in its ORDERBY clause if it specifies any of the following windows:

    • RANGEBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW. The short form of this is RANGEUNBOUNDEDPRECEDING.

    • RANGEBETWEENCURRENTROWANDUNBOUNDEDFOLLOWING

    • RANGEBETWEENCURRENTROWANDCURRENTROW

    • RANGEBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING

    Ablakhatárok e négy kivételével csak egy rendezési kulcs lehet a ORDERBY az analitikus függvény záradéka. Ez a korlátozás nem vonatkozik a ROW kulcsszó által megadott ablakhatárokra.

ASC/DESC adja meg a sorrendet (növekvő vagy csökkenő). ASC az alapértelmezett.

NULLS FIRST / NULLS LAST adja meg, hogy a nulls-t tartalmazó visszaadott sorok először vagy utoljára jelenjenek meg a rendelési sorrendben.

NULLSLAST a növekvő sorrend alapértelmezett értéke, és NULLSFIRST a csökkenő sorrend alapértelmezett értéke.

az analitikus függvények mindig a függvény order_by_clause – ban megadott sorrendben működnek. Azonban a függvény order_by_clause nem garantálja az eredmény sorrendjét. A végeredmény megrendelésének garantálásához használja a lekérdezés order_by_clause értékét.

Lásd még:

order_by_clause of SELECT további információt ebben a záradékban

windowing_clause

egyes analitikus funkciók lehetővé teszik a windowing_clause. Az analitikus függvények felsorolásában e szakasz végén a windowing_clause függvényeket csillag (*) követi.

sorok / tartomány ezek a kulcsszavak minden sorhoz meghatározzák a függvény eredményének kiszámításához használt ablakot (fizikai vagy logikai sorkészletet). A funkciót ezután az ablak összes sorára alkalmazzák. Az ablak a lekérdezés eredménykészletén vagy partícióján keresztül mozog felülről lefelé.

  • ROWS megadja az ablakot fizikai egységekben (sorokban).

  • RANGE az ablakot logikai eltolásként határozza meg.

ezt a záradékot csak akkor adhatja meg, ha megadta a order_by_clauseértéket. A RANGE záradék által meghatározott ablakhatárok lehetővé teszik, hogy csak egy kifejezést adjon meg a order_by_clause. Lásd a “korlátozások a megrendelés záradék”.

a logikai eltolással rendelkező analitikus függvény által visszaadott érték mindig determinisztikus. Azonban a fizikai eltolással rendelkező analitikus függvény által visszaadott érték nem determinisztikus eredményeket eredményezhet, kivéve, ha a rendelési kifejezés egyedi rendelést eredményez. Lehet, hogy több oszlopot kell megadnia a order_by_clause – ban az egyedi megrendelés eléréséhez.

között … Használja a BETWEEN értéket … AND záradék az ablak kezdőpontjának és végpontjának megadásához. Az első kifejezés (AND előtt) meghatározza a kiindulási pontot, a második kifejezés (AND után) meghatározza a végpontot.

ha kihagyja aBETWEEN értéket, és csak egy végpontot ad meg, akkor az Oracle a kezdőpontnak tekinti, a végpont pedig az aktuális sornak.

Unbounded preview Specify UNBOUNDEDPRECEDING annak jelzésére, hogy az ablak a partíció első sorában kezdődik. Ez a kiindulási pont specifikáció, és nem használható végpont specifikációként.

UNBOUNDED FOLLOWING Specify UNBOUNDEDFOLLOWING annak jelzésére, hogy az ablak a partíció utolsó sorában ér véget. Ez a végpont specifikáció, és nem használható kiindulási pont specifikációként.

aktuális sor mint kezdőpont, CURRENTROW meghatározza, hogy az ablak az aktuális sorban vagy értéken kezdődik (attól függően, hogy megadta-e a ROW vagy RANGE). Ebben az esetben a végpont nem lehet value_exprPRECEDING.

végpontként CURRENTROW meghatározza, hogy az ablak az aktuális sorban vagy értéken végződik (attól függően, hogy megadta-e a ROW vagy RANGE). Ebben az esetben a kiindulási pont nem lehet value_exprFOLLOWING.

value_exprRANGE vagy ROW:

  • Ha value_exprFOLLOWING a kiindulási pont, akkor a végpontnak value_exprFOLLOWING.

  • Ha value_exprPRECEDING a végpont, akkor a kiindulási pontnak value_exprPRECEDING.

Ha egy numerikus formátumú időintervallummal definiált logikai ablakot határoz meg, akkor szükség lehet konverziós funkciók használatára.

Lásd még:

NUMTOYMINTERVAL és NUMTODSINTERVAL a numerikus idők

intervallumokra történő konvertálásáról szóló információhoz, ha a ROWS:

  • value_expr fizikai eltolás. Állandónak vagy kifejezésnek kell lennie, és pozitív numerikus értékre kell értékelnie.

  • Ha value_expr a kiindulási pont része, akkor a végpont előtt egy sorba kell értékelnie.

Ha megadottRANGE:

  • value_expr logikai eltolás. Állandónak vagy kifejezésnek kell lennie, amely pozitív numerikus értékre vagy intervallumra értékel. Lásd a “Literals” információt intervallum literals.

  • csak egy kifejezést adhat meg a order_by_clause.

  • Ha value_expr értékel egy numerikus értéket, akkor a ORDERBYexpr kell egy numerikus vagy DATE adattípus.

  • If value_expr evaluates to an interval value, then the ORDERBYexpr must be a DATE data type.

If you omit the windowing_clause entirely, then the default is RANGEBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW.

Analytic functions are commonly used in data warehousing environments. A következő analitikus függvények listájában a csillagok ( * ) által követett függvények lehetővé teszik a teljes szintaxist, beleértve a windowing_clause.

AVG *
CORR *
COUNT *
COVAR_POP *
COVAR_SAMP *
CUME_DIST
DENSE_RANK
FIRST
FIRST_VALUE *
LAG
lag
LAST
LAST_VALUE *
LEAD
LISTAGG
MAX *
medián
MIN *
NTH_VALUE *
NTH_VALUE *
NTILE
százalék_rank
PERCENTILE_CONT
percentile_disc
rank
ratio_to_report
regr_ (lineáris regresszió) függvények *
ROW_NUMBER
StdDev *
stdev_pop *
stddev_samp *
sum *
var_pop *
VAR_SAMP *
variance *

Lásd még:

Oracle database adattárolási útmutató a funkciókkal kapcsolatos további információkért, valamint a használatukat illusztráló FORGATÓKÖNYVEKÉRT

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük