PostgreSql LAG -funksjon () brukes til å få tilgang til raden i tabellen som er til stede før bordets nåværende rad. Som navnet indikerer at det henger etter den nåværende raden og tar posten til tabellen. I PostgreSQL er etterslepfunksjonen viktig, slik at den sammenligner de tidligere radene med den nåværende raden.
Denne funksjonen er egnet for å vite om dataene du skrev inn tidligere, men er til stede i den nåværende raden. Da kan du få tilgang til dataene fra fortiden. Åpne PSQL, og etter å ha oppgitt et passord, kan du nå bruke alle kommandoene på PSQL -skallet.
Syntaks
Lag (uttrykk [offset [verdi]])En forskyvning er et heltallnummer satt i spørringen og viser antall rader som er til stede over den nåværende raden. Det kan være et underspørs eller et uttrykk.
Lag -funksjonen brukes på verdipartisjonen, som hovedsakelig er opprettet av en partisjonsklausul. Samtidig brukes ordren etter klausul for å ordne radene i en spesifisert rekkefølge.
Det er to hovedfunksjoner i etterslepfunksjonen vi har beskrevet her er:
Lag standardpartisjon
Vi har et bord som heter “Showroom” som har detaljene om kjøretøyene. Tabellen er opprettet av "Create Table" -spørsmålet i PSQL og ved å legge til dataene ved hjelp av en "Sett inn" -uttalelse.
>> Velg * fra showroom;Vi vil bruke etterslepfunksjonen på tabellen. Etterslepfunksjonen inneholder to eller flere "velg" uttalelser i den. Siden vi må velge verdien før gjeldende rad, velges den gjeldende raden i det første trinnet og deretter raden før den.
Eksempel 1
I dette eksemplet vil vi velge en kolonne fra tabellen og beregne summen fra priskolonnen. Den andre valgte setningen vil bruke etterslepfunksjonen. Begge disse uttalelsene bruker "orden etter" -bestemmelsen med "gruppe etter" i den samlede funksjonen til SELECT. Ettersom det ikke er noe år som ligner på det andre, så vil alle radene vises. Det blir ingen gruppering. Nå bruker vi kommandoen på tabellen:
>> med CTE som (velg år, sum (pris) pris fra showroom group by year bestilling etter år) velg år, pris, etterslep (pris, 1) over (bestill etter år) forrige_year_discount fra CTE;For å skrive ut verdien på raden over den gjeldende raden, har vi først tilgang til gjeldende rad gjennom SELECT -setningen og har beregnet sumfunksjonen. Verdien som er oppnådd lagres i “CTE” for videre bruk i sistnevnte spørsmål. Den resulterende verdien vil bli bestilt av og gruppert etter "år" -kolonnen.
Når de beveger seg mot den andre valgte setningen, er de samme kolonnene i “CTE” valgt fra tabellen. En ekstra kolonne opprettes med navnet “forrige_year_discount” med etterslep med 1 rad. Og den resulterende kolonnens rader må være ordnet etter årets kolonne.
Du kan se fra tabellen oppnådd at den første raden i den nye kolonnen er tomt. Fordi prisen flyttes til neste rad fra starten av å gjøre første rad null.
Eksempel 2
Det er et annet eksempel; Her bruker vi tre utvalgte utsagn. “CTE” og “CYE” brukes til å lagre verdiene som er hentet fra de to spørsmålene ved å bruke "Select" -uttalelsen, og deres resulterende verdier vil bli brukt i den tredje Select -setningen. Utgangen fra “CTE” fungerer som en utgang for “CTE2”. Tilsvarende vil "CTE2" være innspillet for den tredje valgte setningen. Alle verdiene vises i den resulterende tabellen kombinert fordi ett resultat er en etterslepfunksjon, mens den andre resulterende kolonnen viser forskjellen mellom de to etterslepverdiene.
Å bevege seg mot den første "CTE" beregner den samme funksjonen som forrige eksempel. Summen beregnes ut fra "pris" -kolonnen.
>> med CTE som (velg år, sum (pris) pris fra showroom group etter år bestilling etter år),Den andre “CTE2” ligner den andre Select -kommandoen fordi vi vet at etterslepfunksjonen brukes på summen av kolonnen “Pris”. Kolonnen til den summen "forrige_år_discount" er lagret som i CTE.
>> CTE2 som (velg år, pris, lag (pris, 1) over (bestill etter år) forrige_år_discount fra CTE)Den tredje "utvalgte" uttalelsen vil ta den laggede summen av priser og beregne forskjellen. For eksempel trekker prisen i den tredje raden verdien i andre rad. Samtidig er den første raden null på grunn av etterslepfunksjonen.
>> Velg år, pris, forrige_year_discount, (forrige_year_discount - pris) forskjell fra CTE;Den fjerde kolonnen heter forskjellen fordi den bruker minusoperatøren for å trekke fra verdiene i 3. kolonne.
For hver rad trekkes verdien fra den tredje kolonnen fra forrige rad. For eksempel (3. -2.), (4. -3.), Og så videre. Og den trukkete verdien er skrevet foran den første verdien (trukket fra neste verdi). Men i den 6., den siste raden i kolonnen "Forskjell", er svaret skrevet som oppnås ved å trekke fra 1. rad fra 2. rad, verdien av året 2021.
Eksempel 3
Tenk på et annet eksempel der det samme konseptet brukes på tabellen. Men etterslepet er 2 i stedet for en. En enkelt valgt uttalelse viser prisene, ikke summen eller noen annen samlet funksjon.
>> Velg år, pris, etterslep (pris, 2) over (bestilling etter år) rabatt fra showroom;Den resulterende verdien viser at prisen i rabattkolonnen er forskjøvet to rader ned. Det betyr at vi har fått tilgang til radene før den nåværende raden på tabellen.
Lag -funksjon i partisjonene
Via pgadmin
I PGADMIN, etter å ha gitt passordet, kan du nå få tilgang til databasen og alt innholdet som er til stede i det. Gå til spørringsverktøyet til tabellene. Lag nå nye tabellnavn “Team_Members”.
>> Opprett tabell Team_Members (navn varchar (100), id int, år heltall, lønn heltall);Etter å ha opprettet tabellen, kan du nå legge til verdier i tabellen.
>> Sett inn i Team_Members (navn, id, år, lønn) verdier ('salar', 1, 2018, 180000);Etter at verdiene er satt inn, bruk nå spørringen.
Lag () -funksjonen i denne typen sammenligner ett års lønn med det siste året av hver gruppe.
>> Velg år, lønn, ID, lag (lønn, 1) over partisjon etter id (bestilling etter år) rabatt fra team_members;I dette eksemplet er ID -er gruppert samlet. Partisjonen vil distribuere radene inn i gruppen, da du kan se at alle de samme ID -ene er til stede sammen. Og rabattkolonnen viser sammenligningen av en-radslønn med den andre raden, med etterslep på 1.
Konklusjon
"Lag Function" brukes til å hente posten du har lagt inn før den nåværende raden du har valgt. To hovedkategorier av etterslepfunksjon blir diskutert her med eksempler. Velg, Bestill av brukes i tillegg med "Partisjonen BY -klausulen". Denne funksjonen i PostgreSQL kan brukes i tabellen og deretter bruke forskjellige operasjoner på dem.