SQL OVER () -lauseke – milloin ja miksi se on hyödyllinen?

Joten yksinkertaisilla sanoilla: Over-lauseketta voidaan käyttää yhdistämättömien arvojen valitsemiseen yhdistettyjen arvojen lisäksi.

Partition BY, ORDER BY sisällä ja ROWS tai RANGE ovat osa OVER () lauseketta.

partition by käytetään tietojen osiointiin ja näiden ikkunoiden, yhdistettyjen toimintojen suorittamiseen, ja jos emme Jos osio on silloin koko tulosjoukko, sitä pidetään yhtenä osiona.

Katsotaan ”s Katso OVER-lauseen perussyntaksi

PARTITION BY: Sitä käytetään tietojen osiointiin ja toimintojen suorittamiseen ryhmille, joilla on samat tiedot.

ORDER BY: Sitä käytetään määrittämään tietojen looginen järjestys osioissa. Kun emme määritä osiota, koko tulosjoukko katsotaan yhdeksi osioksi.

: Tätä voidaan käyttää määrittämään, mitä rivejä on tarkoitus ottaa huomioon osiossa suoritettaessa toimintoa.

Otetaan esimerkki:

Tässä on tietojoukkoni:

Joten anna minun suorittaa erilaiset skenaariot ja nähdä, miten data vaikuttaa, ja minä tulen vaikeasta syntaksista yksinkertaiseksi yksi

Noudata vain sum_sal-osaa. Tässä käytän palkkatilausta ja ”ALUEETTOMAN ENNEN KÄYTTÖÖNOTTOA JA VIRTARIVIÄ”. Tässä tapauksessa emme käytä osiota, joten kokonaisia tietoja käsitellään yhtenä. osio ja tilaamme palkan mukaan. Ja tässä on tärkeää RAJOITTAMATTOMA ENNENKÄYTETTÄVÄ JA VIRTA-RIVI. Tämä tarkoittaa, kun laskemme summaa aloitusrivistä kunkin rivin nykyiseen riviin, mutta jos näemme rivejä, joiden palkka on 5000 ja nimi = ”Pavan”, ihannetapauksessa sen pitäisi olla 17000 ja palkkaa varten = 5000 ja nimi = Mark, sen pitäisi olla 22000. Mutta koska käytämme RANGE ja tässä tapauksessa, jos se löytää s samankaltaisia elementtejä, se pitää niitä samana loogisena ryhmänä ja suorittaa niille operaation ja antaa arvon jokaiselle ryhmän ryhmälle. Siksi meillä on sama arvo palkan = 5000. Moottori nousi palkkaan = 5000 ja Nimi = Ron ja laski summan ja osoitti sen sitten kaikille palkoille = 5000.

Joten RIVITTÄMÄT RAJATTOMAN ENNEN KÄYTETTÄVÄN JA NYKYISEN RIVIN Ero on sama arvoerillä kuin ryhmittelemällä ne yhteen, se laskee summan alariviltä nykyiselle riville eikä se käsittele samanarvoisia kohteita kuten ALUE

Nämä tulokset ovat samat kuin

Tämä johtuu siitä, että Over (järjestys palkan mukaan) on vain lyhyt leikkaus Overistä (järjestys palkan mukaan ALUEETTOMAN ENNAKKOLAITTEEN JA NYKYISEN RIVIN VÄLINEN) Joten missä vain määritämme Tilaa tilaamalla ilman RIVITÄ tai ALUETTA, jonka se ottaa ALUE RAJOITTAMATTOMAN ENNENKÄYTÖN JA NYKYISEN Rivin välillä oletuksena.

Huomaa: Tämä koskee vain toimintoja, jotka todella hyväksyvät ALUE / RIVI. Esimerkiksi ROW_NUMBER ja muutamat muut eivät hyväksy RANGE / ROW ja siinä tapauksessa , tätä ei tule kuvaan.

Tähän asti huomasimme, että Over-lauseke tilauksella ottaa Range / ROWS: n ja syntaksin ulkonäkö näyttää Tämän kaltainen ALUE RAJOITTAMATTOMAN ENNEN KÄYTETTÄVÄN JA NYKYISEN RIVIN VÄLITTÖMÄN Ja se tosiasiallisesti laskee nykyisestä rivistä ensimmäisestä rivistä. Mutta mitä jos se haluaa laskea arvot koko tietueelle ja pitää sen jokaisessa sarakkeessa (eli ensimmäisestä rivistä viimeiseen riviin). Tässä on kysely tälle.

Nykyisen rivin sijasta määritän RAJOITTAMATTOMAN SEURAAVAN, joka kehottaa moottoria laskemaan kunkin rivin viimeisen osiotietueeseen asti.

Tulen nyt kohta, mikä on OVER () tyhjillä aaltosulkeilla?

Se on vain oikotie Overille (järjestys palkan mukaan RIVITTYJEN RAJOITTAMATTOMIEN JA RAJOITTAMATTOMIEN JÄLKEEN)

Tässä määritämme epäsuorasti käsitellä kaikkia tulosjoukkojani yhtenä osiona ja suorittaa sitten laskelmat kunkin tietueen ensimmäisestä ja viimeisestä tietueesta.

Luin videon tästä ja jos olet kiinnostunut, voit vierailla siinä. https://www.youtube.com/watch?v=CvVenuVUqto&t=1177s

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

Write a Comment

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *