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_clause
hatá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 ORDER
BY
záradékot. Minden csatlakozás és minden WHERE
GROUP
BY
, é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 ORDER
BY
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::=
Az ábra leírása ” analytic_function.gif”
analytic_clause::=
Az ábra leírása ” analytic_clause.gif”
query_partition_clause::=
Az ábra leírása ” query_partition_clause.gif”
order_by_clause::=
Az ábra leírása ” order_by_clause.gif”
windowing_clause:: =
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 OVER
analytic_clause
to indicate that the function operates on a query result set. This clause is computed after the FROM
WHERE
GROUP
BY
, and HAVING
clauses. Ezzel a záradékkal megadhatja az analitikai funkciókat a select listában vagy a ORDER
BY
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_clause
bá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
OVER
analytic_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 PARTITION
BY
záradékot a lekérdezési eredmény egy vagy több value_expr
alapjá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ő PARTITION
BY
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_DIST
DENSE_RANK
NTILE
PERCENT_RANK
ésRANK
ugyanazt az eredményt adja vissza az egyes sorokhoz. -
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 aROWS
kulcsszóval, akkor az eredmény nem determinisztikus.
ROW_NUMBER
minden sorhoz külön értéket rendel, még akkor is, ha a order_by_clause
alapján döntetlen van. Az érték a sor feldolgozásának sorrendjén alapul, amely nem determinisztikus lehet, ha a ORDER
BY
nem garantálja a teljes megrendelést.
a megrendelésre vonatkozó korlátozások a következő korlátozások vonatkoznak a ORDER
BY
záradékra:
-
analitikus funkció esetén a
order_by_clause
kifejezésnek kell lennie (expr
). ASIBLINGS
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 aorder_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 itsORDER
BY
clause if it specifies any of the following windows:-
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
CURRENT
ROW
. The short form of this isRANGE
UNBOUNDED
PRECEDING
. -
RANGE
BETWEEN
CURRENT
ROW
AND
UNBOUNDED
FOLLOWING
-
RANGE
BETWEEN
CURRENT
ROW
AND
CURRENT
ROW
-
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
UNBOUNDED
FOLLOWING
Ablakhatárok e négy kivételével csak egy rendezési kulcs lehet a
ORDER
BY
az analitikus függvény záradéka. Ez a korlátozás nem vonatkozik aROW
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.
NULLS
LAST
a növekvő sorrend alapértelmezett értéke, és NULLS
FIRST
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 UNBOUNDED
PRECEDING
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 UNBOUNDED
FOLLOWING
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, CURRENT
ROW
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_expr
PRECEDING
.
végpontként CURRENT
ROW
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_expr
FOLLOWING
.
value_exprRANGE
vagy ROW
:
-
Ha
value_expr
FOLLOWING
a kiindulási pont, akkor a végpontnakvalue_expr
FOLLOWING
. -
Ha
value_expr
PRECEDING
a végpont, akkor a kiindulási pontnakvalue_expr
PRECEDING
.
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 aORDER
BY
expr
kell egy numerikus vagyDATE
adattípus. -
If
value_expr
evaluates to an interval value, then theORDER
BY
expr
must be aDATE
data type.
If you omit the windowing_clause
entirely, then the default is RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
CURRENT
ROW
.
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