Analytiske funksjoner beregner en mengdeverdi basert på en gruppe rader. De skiller seg fra aggregatfunksjoner ved at de returnerer flere rader for hver gruppe. Gruppen av rader kalles et vindu og er definert av analytic_clause
. For hver rad er et glidende vindu av rader definert. Vinduet bestemmer rekkevidden av rader som brukes til å utføre beregningene for gjeldende rad. Vindustørrelser kan baseres på enten et fysisk antall rader eller et logisk intervall, for eksempel tid.
Analytiske funksjoner er det siste settet med operasjoner som utføres i en spørring, bortsett fra den endelige ORDER
BY
– klausulen. Alle sammenføyninger og alle WHERE
GROUP
BY
og HAVING
klausuler er fullført før de analytiske funksjonene behandles. Derfor kan analytiske funksjoner bare vises i select-listen eller ORDER
BY
– klausulen.
Analytiske funksjoner brukes ofte til å beregne kumulative, bevegelige, sentrerte og rapporteringsaggregater.
analytic_function::=
beskrivelse av illustrasjonen » analytic_function.gif «
analytic_clause::=
beskrivelse av illustrasjonen » analytic_clause.gif «
query_partition_clause::=
beskrivelse av illustrasjonen » query_partition_clause.gif «
order_by_clause::=
beskrivelse av illustrasjonen » order_by_clause.gif «
windowing_clause:: =
beskrivelse av illustrasjonen » windowing_clause.gif «
semantikken til denne syntaksen er omtalt i seksjonene som følger.
analytic_function
Angi navnet på en analytisk funksjon (se listen over analytiske funksjoner etter denne diskusjonen om semantikk).
argumenter
Analytiske funksjoner tar 0 til 3 argumenter. Argumentene kan være en numerisk datatype eller en ikke-numerisk datatype som implisitt kan konverteres til en numerisk datatype. Oracle bestemmer argumentet med høyest numerisk prioritet og konverterer implisitt de gjenværende argumentene til denne datatypen. Returtypen er også datatypen, med mindre annet er angitt for en individuell funksjon.
Se Også:
«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. Du kan angi analytiske funksjoner med denne klausulen i select-listen ellerORDER
BY
klausul. Hvis du vil filtrere resultatene av en spørring basert på en analytisk funksjon, nest disse funksjonene i den overordnede spørringen, og filtrer deretter resultatene av det nestede delspørringen.
merknader om analytic_clause: følgende merknader gjelder foranalytic_clause
:
-
du kan ikke neste analytiske funksjoner ved å angi en analytisk funksjon i noen del av
analytic_clause
. Du kan imidlertid angi en analytisk funksjon i en delspørring og beregne en annen analytisk funksjon over den. -
du kan spesifisere
OVER
analytic_clause
med brukerdefinerte analytiske funksjoner samt innebygde analytiske funksjoner. Se OPPRETT FUNKSJON.
query_partition_clause
BrukPARTITION
BY
setningsdelen for å partisjonere spørringsresultatet i grupper basert på en eller flerevalue_expr
. Hvis du utelater denne klausulen, behandler funksjonen alle rader i spørringsresultatsettet som en enkelt gruppe.
For å bruke query_partition_clause
i en analytisk funksjon, bruk den øvre grenen av syntaksen (uten parenteser). For å bruke denne klausulen i en modellspørring (i model_column_clauses
) eller en partisjonert ytre sammenføyning (i outer_join_clause
), bruk den nedre grenen av syntaksen (med parenteser).
du kan angi flere analytiske funksjoner i samme spørring, hver med samme eller forskjellige PARTITION
BY
taster.
hvis objektene som spørres har parallellattributtet, og hvis du angir en analytisk funksjon med query_partition_clause
, blir også funksjonsberegningene parallelisert.
Gyldige verdier av value_expr
er konstanter, kolonner, ikke-analytiske funksjoner, funksjonsuttrykk eller uttrykk som involverer noen av disse.
order_by_clause
Bruk order_by_clause
for å angi hvordan data skal bestilles i en partisjon. For alle analytiske funksjoner kan du bestille verdiene i en partisjon på flere taster, hver definert av en value_expr
og hver kvalifisert av en bestillingssekvens.
I hver funksjon kan du angi flere ordreuttrykk. Dette er spesielt nyttig når du bruker funksjoner som rangerer verdier, fordi det andre uttrykket kan løse bånd mellom identiske verdier for det første uttrykket.
Når order_by_clause
resulterer i identiske verdier for flere rader, fungerer funksjonen som følger:
-
CUME_DIST
DENSE_RANK
NTILE
PERCENT_RANK
ogRANK
returner samme resultat for hver av radene. -
ROW_NUMBER
tildeler hver rad en distinkt verdi selv om det er uavgjort basert påorder_by_clause
. Verdien er basert på rekkefølgen raden behandles i, noe som kan være ikke-deterministisk hvisORDER
BY
garanterer ikke en total bestilling. -
for alle andre analytiske funksjoner avhenger resultatet av vindusspesifikasjonen. Hvis du angir et logisk vindu med nøkkelordet
RANGE
, returnerer funksjonen samme resultat for hver av radene. Hvis du angir et fysisk vindu med nøkkelordetROWS
, er resultatet ikke-deterministisk.
Begrensninger PÅ ORDER BY-Klausulen følgende begrensninger gjelder forORDER
BY
klausul:
-
når den brukes i en analytisk funksjon, må
order_by_clause
ta et uttrykk (expr
SIBLINGS
nøkkelordet er ikke gyldig (det er bare relevant i hierarkiske spørringer). Posisjon (position
) og kolonnealiaser (c_alias
) er også ugyldige. Ellers er detteorder_by_clause
det samme som det som brukes til å bestille den generelle spørringen eller subquery. -
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
Vindugrenser annet enn disse fire Kan bare ha en sorteringsnøkkel i
ORDER
BY
klausul av analytisk funksjon. Denne begrensningen gjelder ikke for vindusgrenser angitt avROW
– nøkkelordet. -
-
ROWS
angir vinduet i fysiske enheter (rader). -
RANGE
angir vinduet som en logisk forskyvning. -
Hvis
value_expr
FOLLOWING
er startpunktet, må sluttpunktet værevalue_expr
FOLLOWING
. -
Hvis
value_expr
PRECEDING
er sluttpunktet, må startpunktet værevalue_expr
PRECEDING
. -
value_expr
er en fysisk forskyvning. Det må være en konstant eller uttrykk og må evaluere til en positiv numerisk verdi. -
Hvis
value_expr
er en del av startpunktet, må det evalueres til en rad før sluttpunktet. -
value_expr
er en logisk forskyvning. Det må være en konstant eller uttrykk som evaluerer til en positiv numerisk verdi eller et intervall bokstavelig. Se «Litteraler» for informasjon om intervalllitteraler. -
Du kan bare angi ett uttrykk i
order_by_clause
. -
hvis
value_expr
evaluerer til en numerisk verdi, måORDER
BY
expr
må være numerisk ellerDATE
datatype. -
If
value_expr
evaluates to an interval value, then theORDER
BY
expr
must be aDATE
data type.
ASC / DESC Spesifiser rekkefølgen (stigende eller synkende). ASC
er standard.
NULLS FIRST / NULLS LAST Angi om returnerte rader som inneholder nulls SKAL vises først eller sist i rekkefølgen.
NULLS
LAST
er standard for stigende rekkefølge, og NULLS
FIRST
er standard for synkende rekkefølge.
Analytiske funksjoner opererer alltid på rader i den rekkefølgen som er angitt iorder_by_clause
av funksjonen. Menorder_by_clause
av funksjonen garanterer ikke rekkefølgen på resultatet. Bruk order_by_clause
av spørringen for å garantere det endelige resultatet bestilling.
se Også:
order_by_clause AV SELECT for mer informasjon om denne klausulen
windowing_clause
noen analytiske funksjoner tillater windowing_clause
. I listen over analytiske funksjoner på slutten av denne delen, blir funksjonene som tillater windowing_clause
etterfulgt av en stjerne (*).
RADER / OMRÅDE disse søkeordene definerer for hver rad et vindu (et fysisk eller logisk sett med rader) som brukes til å beregne funksjonsresultatet. Funksjonen brukes deretter på alle rader i vinduet. Vinduet beveger seg gjennom spørringsresultatsettet eller partisjonen fra topp til bunn.
du kan ikke angi denne klausulen med mindre du har angitt order_by_clause
. Noen vindusgrenser definert avRANGE
– klausulen lar deg angi bare ett uttrykk i order_by_clause
. Se «Restriksjoner PÅ ORDER BY-Klausulen».
verdien som returneres av en analytisk funksjon med en logisk forskyvning, er alltid deterministisk. Verdien som returneres av en analytisk funksjon med en fysisk forskyvning, kan imidlertid gi ikke-deterministiske resultater, med mindre ordreuttrykket resulterer i en unik rekkefølge. Du må kanskje angi flere kolonner i order_by_clause
for å oppnå denne unike bestillingen.
MELLOM … OG Bruk BETWEEN
AND
klausul for å angi et startpunkt og sluttpunkt for vinduet. Det første uttrykket (før AND
) definerer startpunktet og det andre uttrykket (etter AND
) definerer sluttpunktet.
hvis du utelater BETWEEN
og angir bare ett sluttpunkt, anser Oracle det som startpunktet, og sluttpunktet er standard til gjeldende rad.
UBUNDET FOREGÅENDE Angi UNBOUNDED
PRECEDING
for å indikere at vinduet starter på den første raden i partisjonen. Dette er startpunktspesifikasjonen og kan ikke brukes som sluttpunktspesifikasjon.
UBUNDET ETTER Spesifiser UNBOUNDED
FOLLOWING
for å indikere at vinduet slutter på den siste raden i partisjonen. Dette er sluttpunktspesifikasjonen og kan ikke brukes som startpunktspesifikasjon.
GJELDENDE RAD som startpunkt,CURRENT
ROW
angir at vinduet begynner med gjeldende rad eller verdi (avhengig av om du har angitt ROW
eller RANGE
). I dette tilfellet kan ikke sluttpunktet være value_expr
PRECEDING
.
som sluttpunkt angir CURRENT
ROW
angir at vinduet slutter med gjeldende rad eller verdi (avhengig av om du har angitt ROW
eller RANGE
). I dette tilfellet kan ikke startpunktet være value_expr
FOLLOWING
.
value_expr FØR eller value_expr FØLGER forRANGE
eller ROW
:
hvis du definerer et logisk vindu definert av et tidsintervall i numerisk format, må du kanskje bruke konverteringsfunksjoner.
Se Også:FOR informasjon om konvertering av numeriske tider til intervaller
hvis du angav ROWS
:
hvis du angav RANGE
:
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. I listen over analytiske funksjoner som følger, tillater funksjoner etterfulgt av en stjerne (*) full syntaks ,inkludert windowing_clause
.COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT *COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT * COUNT prosent_rank
PROSENTILE_CONT
prosentile_disc
ratio_to_report
regr_ (LINEÆR REGRESJON) FUNKSJONER *
ROW_NUMBER
STDDEV_POP *
STDDEV_SAMP *
SUM *
VAR_POP *
var_samp *
varians *
se også:
ORACLE DATABASE datavarehusveiledning for mer INFORMASJON om disse funksjonene og FOR SCENARIER SOM ILLUSTRERER bruken av dem