Analytiske Funksjoner

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 ORDERBY – klausulen. Alle sammenføyninger og alle WHEREGROUPBY og HAVING klausuler er fullført før de analytiske funksjonene behandles. Derfor kan analytiske funksjoner bare vises i select-listen eller ORDERBY – klausulen.

Analytiske funksjoner brukes ofte til å beregne kumulative, bevegelige, sentrerte og rapporteringsaggregater.

analytic_function::=

Beskrivelse av analytic_function.gif følger

beskrivelse av illustrasjonen » analytic_function.gif «

analytic_clause::=

Beskrivelse av analytic_clause.gif følger

beskrivelse av illustrasjonen » analytic_clause.gif «

query_partition_clause::=

Beskrivelse av query_partition_clause.gif følger
beskrivelse av illustrasjonen » query_partition_clause.gif «

order_by_clause::=

Beskrivelse av order_by_clause.gif følger

beskrivelse av illustrasjonen » order_by_clause.gif «

windowing_clause:: =

Beskrivelse av windowing_clause.gif følger

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 OVERanalytic_clause to indicate that the function operates on a query result set. This clause is computed after the FROMWHEREGROUPBY, and HAVING clauses. Du kan angi analytiske funksjoner med denne klausulen i select-listen ellerORDERBY 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 spesifisereOVERanalytic_clause med brukerdefinerte analytiske funksjoner samt innebygde analytiske funksjoner. Se OPPRETT FUNKSJON.

query_partition_clause

BrukPARTITIONBY 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 PARTITIONBY 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_DISTDENSE_RANKNTILEPERCENT_RANKog RANKreturner 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 hvis ORDERBY garanterer ikke en total bestilling.

  • for alle andre analytiske funksjoner avhenger resultatet av vindusspesifikasjonen. Hvis du angir et logisk vindu med nøkkelordetRANGE, 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 forORDERBY klausul:

  • når den brukes i en analytisk funksjon, må order_by_clause ta et uttrykk (exprSIBLINGS nøkkelordet er ikke gyldig (det er bare relevant i hierarkiske spørringer). Posisjon (position) og kolonnealiaser (c_alias) er også ugyldige. Ellers er dette order_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 its ORDERBY clause if it specifies any of the following windows:

    • RANGEBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW. The short form of this is RANGEUNBOUNDEDPRECEDING.

    • RANGEBETWEENCURRENTROWANDUNBOUNDEDFOLLOWING

    • RANGEBETWEENCURRENTROWANDCURRENTROW

    • RANGEBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING

    Vindugrenser annet enn disse fire Kan bare ha en sorteringsnøkkel iORDERBY klausul av analytisk funksjon. Denne begrensningen gjelder ikke for vindusgrenser angitt avROW – nøkkelordet.

  • 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.

    NULLSLAST er standard for stigende rekkefølge, og NULLSFIRST 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.

    • ROWS angir vinduet i fysiske enheter (rader).

    • RANGE angir vinduet som en logisk forskyvning.

    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 BETWEENAND 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 UNBOUNDEDPRECEDING for å indikere at vinduet starter på den første raden i partisjonen. Dette er startpunktspesifikasjonen og kan ikke brukes som sluttpunktspesifikasjon.

    UBUNDET ETTER Spesifiser UNBOUNDEDFOLLOWING for å indikere at vinduet slutter på den siste raden i partisjonen. Dette er sluttpunktspesifikasjonen og kan ikke brukes som startpunktspesifikasjon.

    GJELDENDE RAD som startpunkt,CURRENTROW 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_exprPRECEDING.

    som sluttpunkt angir CURRENTROW 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_exprFOLLOWING.

    value_expr FØR eller value_expr FØLGER forRANGE eller ROW:

    • Hvisvalue_exprFOLLOWING er startpunktet, må sluttpunktet værevalue_exprFOLLOWING.

    • Hvisvalue_exprPRECEDING er sluttpunktet, må startpunktet værevalue_exprPRECEDING.

    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:

    • value_expr er en fysisk forskyvning. Det må være en konstant eller uttrykk og må evaluere til en positiv numerisk verdi.

    • Hvisvalue_expr er en del av startpunktet, må det evalueres til en rad før sluttpunktet.

    hvis du angav RANGE:

    • 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å ORDERBYexpr må være numerisk eller DATE datatype.

    • 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. 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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *