SQL OVER () -klausulen – når og hvorfor er den nyttig?

Så med enkle ord: Overklausul kan brukes til å velge ikke-aggregerte verdier sammen med aggregerte.

Partisjon BY, ORDER BY inni og ROWS eller RANGE er en del av OVER () etter paragraf.

partition by brukes til å partisjonere data og deretter utføre disse vinduene, aggregerte funksjoner, og hvis vi ikke ha partisjon av det da hele resultatsettet betraktes som en enkelt partisjon.

La oss se grunnleggende syntaks for OVER-setningen

PARTITION BY: Den brukes til å partisjonere data og utføre operasjoner på grupper med samme data.

ORDER BY: Den brukes til å definere den logiske rekkefølgen på data i Partitions. Når vi ikke spesifiserer partisjon, blir hele resultatsettet betraktet som en enkelt partisjon

: Dette kan brukes til å spesifisere hvilke rader som skal anses i en partisjon når operasjonen utføres.

La oss ta et eksempel:

Her er datasettet mitt:

Så la meg utføre forskjellige scenarier og se hvordan data blir påvirket, og jeg kommer fra vanskelig syntaks til enkel en

Bare følg sum_sal-delen. Her bruker jeg rekkefølge etter lønn og bruker «RANGE MELLOM UGRENSET FREMFØRING OG AKTUELL RAD». I dette tilfellet bruker vi ikke partisjon, så hele data vil bli behandlet som en partisjon og vi bestiller på lønn. Og det viktige her er UBEGRENSET FREMGÅENDE OG LØPENDE RAD. Dette betyr når vi beregner summen, fra startrekke til gjeldende rad for hver rad. Men hvis vi ser rader med lønn 5000 og navn = «Pavan», ideelt sett bør det være 17000 og for lønn = 5000 og navn = Mark, det skal være 22000. Men ettersom vi bruker RANGE og i dette tilfellet, hvis det finner noen s imilar elementer, da anser de dem som den samme logiske gruppen og utfører en operasjon på dem og tildeler verdi til hvert element i den gruppen. Det er grunnen til at vi har samme verdi for lønn = 5000. Motoren gikk opp til lønn = 5000 og Navn = Ron og beregnet summen og tildelte den deretter til all lønn = 5000. gruppere dem sammen, det beregner SUM fra startrad til nåværende rad, og det behandler ikke varer med samme verdi annerledes som RANGE

Disse resultatene er de samme som

Det er fordi Over (ordre etter lønn) bare er en snarvei til Over (rekkefølge etter lønn RANGE MELLOM UGRENSET FREMGÅENDE OG AKTUELL RAD) Så uansett hvor vi bare spesifiserer Bestill etter uten RADER eller RANGE det tar RANGE MELLOM UBEGRENSET FREMGANG OG AKTUELL RAD som standard.

Merk: Dette gjelder bare for funksjoner som faktisk godtar RANGE / ROW. For eksempel ROW_NUMBER og få andre godtar ikke RANGE / ROW og i så fall , dette kommer ikke inn i bildet.

Inntil nå så vi at Over-ledd med en ordre ved å ta Range / ROWS og syntaksen ser noe ut henger som dette RANGE MELLOM UBEGRENSET FREMGÅENDE OG AKTUELL RÅ Og det beregner faktisk opp til den nåværende raden fra første rad. Men hva hvis den vil beregne verdier for hele datapartisjonen og ha den for hver kolonne (det vil si fra første rad til siste rad). Her er spørringen om det

I stedet for CURRENT ROW spesifiserer jeg UGRENSET FØLGENDE som instruerer motoren til å beregne til den siste partisjonslisten for hver rad.

Kommer nå til din pek på hva som er OVER () med tomme seler?

Det er bare en snarvei for Over (rekkefølge etter lønn RADER MELLOM UBEGRENSET FØRING OG UGRENSET FØLGENDE)

Her spesifiserer vi indirekte å behandle alle resultatsettene mine som en enkelt partisjon og deretter utføre beregninger fra den første posten til den siste oppføringen av hver partisjon. div id = «788dea9b86″>

Takk, Pavan Kumar AryasomayajuluHTTP: //xyzcoder.github.io

Write a Comment

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