analyyttiset funktiot laskevat yhteenlasketun arvon riviryhmän perusteella. Ne eroavat yhteenlasketuista funktioista siinä, että ne palauttavat kullekin ryhmälle useita rivejä. Riviryhmää kutsutaan ikkunaksi ja se määritellään analytic_clause
. Kullekin riville on määritelty rivien liukuikkuna. Ikkuna määrittää rivialueen, jota käytetään nykyisen rivin laskemiseen. Ikkunakoot voivat perustua joko fyysiseen rivimäärään tai loogiseen intervalliin, kuten aikaan.
analyyttiset funktiot ovat viimeinen kyselyssä suoritettujen operaatioiden joukko lukuun ottamatta lopullista ORDER
BY
lauseketta. Kaikki liitokset ja kaikki WHERE
GROUP
BY
ja HAVING
lausekkeet täytetään ennen analyyttisten funktioiden käsittelyä. Siksi analyyttiset funktiot voivat esiintyä vain select-luettelossa tai ORDER
BY
lauseke.
analyyttisiä funktioita käytetään yleisesti kumulatiivisten, liikkuvien, keskitettyjen ja raportoivien aggregaattien laskemiseen.
analytic_function::=
kuvausta ”analytic_function.gif ”
analytic_clause::=
kuvausta ”analytic_clause.gif ”
query_partition_clause::=
kuvausta ”query_partition_clause.gif ”
order_by_clause::=
kuvausta ”order_by_clause.gif ”
ikkuna_clause::=
kuvituksen kuvausta ”windowing_clause.gif ”
tämän syntaksin semantiikkaa käsitellään seuraavissa jaksoissa.
analytic_function
Määritä analyyttisen funktion nimi (Katso analyyttisten funktioiden luettelo tämän semantiikan käsittelyn jälkeen).
argumentit
analyyttiset funktiot vaativat 0-3 argumenttia. Argumentit voivat olla mitä tahansa numeerista tietotyyppiä tai mitä tahansa ei-numeerista tietotyyppiä, joka voidaan implisiittisesti muuntaa numeeriseksi tietotyypiksi. Oracle määrittää argumentin suurimmalla numeerisella etuoikeudella ja muuntaa implisiittisesti jäljellä olevat argumentit kyseiseen tietotyyppiin. Palautustyyppi on myös kyseinen tietotyyppi, ellei yksittäisestä funktiosta ole toisin mainittu.
Katso myös:
”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. Voit määrittää analyyttiset funktiot tällä lausekkeella select-luettelossa tai ORDER
BY
lauseke. Jos haluat suodattaa analyyttiseen funktioon perustuvan kyselyn tulokset, peittele nämä funktiot kantakyselyyn ja suodata sitten sisäkkäisen alakerran tulokset.
huomautukset analytic_clausesta: seuraavat huomautukset koskevat analytic_clause
:
-
ei voi pesiä analyyttisiä funktioita määrittämällä mitään analyyttistä funktiota missään
analytic_clause
. Voit kuitenkin määrittää analyyttisen funktion alikuvauksessa ja laskea toisen analyyttisen funktion sen päälle.
voit määrittääOVER
analytic_clause
käyttäjän määrittelemillä analyyttisillä funktioilla sekä sisäänrakennetuilla analyyttisillä funktioilla. Katso luo funktio.
query_partition_clause
käytä PARTITION
BY
lauseketta kyselyn tulosjoukon jakamiseen ryhmiin, jotka perustuvat yhteen tai useampaan value_expr
. Jos jätät tämän lausekkeen pois, funktio käsittelee kyselytulosjoukon kaikki rivit yhtenä ryhmänä.
käyttääksesi query_partition_clause
analyyttisessä funktiossa, käytä syntaksin ylähaaraa (ilman sulkuja). Jos haluat käyttää tätä lauseketta mallikyselyssä (model_column_clauses
) tai osioidussa ulommassa liitoksessa (outer_join_clause
), käytä syntaksin alempaa haaraa (sulkeineen).
voit määrittää samassa kyselyssä useita analyyttisiä funktioita, joilla kaikilla on sama tai eri PARTITION
BY
avaimet.
Jos kysytyillä olioilla on parallel-attribuutti, ja jos määritellään analyyttinen funktio query_partition_clause
, niin myös funktiolaskennat ovat paralleloituja.
value_expr
kelvollisia arvoja ovat vakiot, sarakkeet, ei -analyyttiset funktiot, funktion lausekkeet tai lausekkeet, joihin liittyy jokin näistä.
order_by_clause
käytä order_by_clause
määrittääksesi, miten tiedot on järjestetty osion sisällä. Kaikille analyyttisille funktioille voidaan järjestää osion arvot useilla näppäimillä, joista jokainen on määritelty value_expr
ja jokainen on hyväksytty järjestysjärjestyksellä.
kunkin funktion sisällä voit määrittää useita tilauslausekkeita. Näin toimiminen on erityisen hyödyllistä käytettäessä arvoja sijoittavia funktioita, koska toinen lauseke voi ratkaista ensimmäisen lausekkeen identtisten arvojen väliset sidokset.
aina kun order_by_clause
antaa identtiset arvot useille riveille, funktio käyttäytyy seuraavasti:
-
kaikkien muiden analyyttisten funktioiden osalta tulos riippuu ikkunan määrittelystä. Jos määrittelet loogisen ikkunan
RANGE
avainsanalla, funktio palauttaa saman tuloksen jokaiselle riville. Jos määrittelet fysikaalisen ikkunanROWS
avainsanalla, tulos on nondeterministinen.
CUME_DIST
DENSE_RANK
NTILE
PERCENT_RANK
, jaRANK
palauta sama tulos jokaiselle riville.
ROW_NUMBER
antaa jokaiselle riville erillisen arvon, vaikka olisi tasapeliorder_by_clause
. Arvo perustuu rivin käsittelyjärjestykseen, joka voi olla nondeterministinen, jos ORDER
BY
ei takaa kokonaisjärjestystä.
järjestyksen rajoitukset lausekkeella seuraavat rajoitukset koskevat ORDER
BY
lauseketta:
-
käytettäessä analyyttisessä funktiossa
order_by_clause
on käytettävä lauseketta (expr
SIBLINGS
avainsana ei ole kelvollinen (sillä on merkitystä vain hierarkkisissa kyselyissä). Myös asema (position
) ja sarakenimet (c_alias
) ovat virheellisiä. Muuten tämäorder_by_clause
on sama kuin yleiskyselyn tai alakerran järjestämiseen käytetty. -
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
muilla kuin näillä neljällä Ikkunarajoilla voi olla vain yksi lajitteluavain
ORDER
BY
analyyttisen funktion lauseke. Tämä rajoitus ei koskeROW
avainsanalla määriteltyjä ikkunan rajoja. -
-
ROWS
määrittää ikkunan fyysisinä yksikköinä (riveinä). -
Jos
value_expr
FOLLOWING
on lähtöpiste, niin päätepisteen on oltavavalue_expr
FOLLOWING
. -
value_expr
on looginen Siirtymä. Sen on oltava vakio tai lauseke, joka arvioi positiiviseksi numeeriseksi arvoksi tai intervalli-kirjaimeksi. Katso ”Literals” tietoja intervalli literals. -
order_by_clause
. -
If
value_expr
evaluates to an interval value, then theORDER
BY
expr
must be aDATE
data type.
ASC / DESC Määritä järjestysjärjestys (nouseva tai laskeva). ASC
on oletusarvo.
NULLS FIRST / NULLS LAST Määritä, tuleeko nulleja sisältävien palautettujen rivien ilmestyä ensimmäisenä vai viimeisenä tilausjärjestyksessä.
NULLS
LAST
on laskevan järjestyksen oletusarvo ja NULLS
FIRST
on laskevan järjestyksen oletusarvo.
analyyttiset funktiot toimivat aina riveillä, jotka on määritelty funktion order_by_clause
. Funktion order_by_clause
ei kuitenkaan takaa tuloksen järjestystä. Käytä kyselyn
Katso myös:
ORDER_BY_CLAUSE of SELECT lisätietoja tästä lausekkeesta
windowing_clause
jotkut analyyttiset funktiot sallivat windowing_clause
. Tämän jakson lopussa olevassa analyyttisten funktioiden luettelossa niitä funktioita, jotka mahdollistavat windowing_clause
, seuraa asteriski (*).
rivit / alue nämä avainsanat määrittelevät jokaiselle riville a-ikkunan (fyysisen tai loogisen rivijoukon), jota käytetään funktion tuloksen laskemiseen. Funktio levitetään sitten kaikille ikkunan riveille. Ikkuna liikkuu kyselyn tulosjoukon tai osion läpi ylhäältä alas.
RANGE
määrittää ikkunan loogisena siirtona.
tätä lauseketta ei voi määritellä, ellei ole määritellyt order_by_clause
. Joidenkin RANGE
– lausekkeen määrittelemien ikkunarajojen avulla order_by_clause
voi määritellä vain yhden lausekkeen. KS.kohta ”järjestyksen rajoitukset Lausekkeittain”.
analyyttisen funktion loogisella offsetilla palauttama arvo on aina deterministinen. Analyyttisen funktion, jolla on fysikaalinen offset, palauttama arvo voi kuitenkin tuottaa ei-deterministisiä tuloksia, ellei tilausilmaisu johda ainutlaatuiseen tilaukseen. Voit joutua määrittämään useita sarakkeita order_by_clause
tämän ainutlaatuisen tilauksen saavuttamiseksi.
välillä… Ja käytä AND
lauseke, joka määrittää ikkunan alku-ja loppupisteen. Ensimmäinen lauseke (ennen AND
) määrittelee alkupisteen ja toinen lauseke (AND
jälkeen) päätepisteen.
Jos BETWEEN
jätetään pois ja määritetään vain yksi päätepiste, Oracle pitää sitä alkupisteenä, ja päätepiste on oletusarvo nykyiselle riville.
UNBOUNDED previous Specify UNBOUNDED
PRECEDING
to indicate that the window starts at the first row of the osion. Tämä on alkupisteen määritys, eikä sitä voida käyttää päätepisteen määrityksenä.
UNBOUNDED FOLLOWING Specify UNBOUNDED
FOLLOWING
to indicate that the window ends at the last row of the osion. Tämä on päätepistemääritelmä, eikä sitä voida käyttää alkupisteen määrityksenä.
nykyinen rivi aloituspisteenä, CURRENT
ROW
määrittää, että ikkuna alkaa nykyisellä rivillä tai arvolla (riippuen siitä, onko määritelty ROW
vai RANGE
). Tällöin päätepiste ei voi olla value_expr
PRECEDING
.
päätepisteenä CURRENT
ROW
määrittää, että ikkuna päättyy nykyiseen riviin tai arvoon (riippuen siitä, onko määritelty ROW
vai RANGE
). Tällöin alkupiste ei voi olla value_expr
FOLLOWING
.
value_expr edeltävä tai value_expr Seuraava RANGE
tai ROW
:
Josvalue_expr
PRECEDING
on päätepiste, niin alkupisteen on oltavavalue_expr
PRECEDING
.
Jos määrittelet aikavälin määrittelemää loogista ikkunaa numeerisessa muodossa, saatat joutua käyttämään muunnosfunktioita.
Katso myös:
NUMTOYMINTERVAL ja NUMTODSINTERVAL tietoa numeeristen aikojen muuntamisesta intervalleiksi
Jos määritelty ROWS
:
value_expr
on fyysinen offset. Sen on oltava vakio tai lauseke ja sen on arvioitava positiiviseen numeeriseen arvoon.
Josvalue_expr
on osa alkupistettä, sen on arvioitava riville ennen päätepistettä.
Jos määritelty RANGE
:
Josvalue_expr
arvioi numeeriseksi arvoksi, niinORDER
BY
expr
on oltava numeerinen taiDATE
tietotyyppi.
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. Seuraavassa luettelossa analyyttisistä funktioista Asteriskilla (*) merkityt funktiot mahdollistavat koko syntaksin, mukaan lukien windowing_clause
.
AVG *
CORR *
COUNT *
COVAR_POP *
COVAR_SAMP *
CUME_DIST
DENSE_RANK
FIRST
FIRST_VALUE *
LAG
LAST
LAST_VALUE *
LEAD
LISTAGG
MAX *
mediaani
MIN *
NTH_VALUE *
NTILE
percent_rank
PERCENTILE_CONT
rank
ratio_to_report
regr_ (lineaarinen regressio) funktiot *
ROW_NUMBER
STDDEV *
stddev_samp *
Sum *
var_pop *
VAR_SAMP *
varianssi *
Katso myös:
Oracle Database tietovarastointi opas lisätietoa näistä toiminnoista ja niiden käyttöä kuvaavista skenaarioista