Lag Postgresql

Lag Postgresql

PostgreSQL Lag Function () viene utilizzato per accedere alla riga nella tabella presente prima della riga corrente della tabella. Mentre il nome indica che è in ritardo dietro la riga corrente e prende il record della tabella. In PostgreSQL, la funzione LAG è importante in modo da confrontare le righe precedenti con la riga corrente.

Questa funzione è adatta per conoscere i dati inseriti in precedenza ma sono presenti nella riga corrente. Quindi puoi accedere ai dati del passato. Apri PSQL e dopo aver fornito una password, ora puoi applicare tutti i comandi sulla shell PSQL.

Sintassi

Lag (espressione [offset [valore]])
SOPRA (
[Partizione per espressione, ...]
Ordine per espressione [ASC | Desc], ..
)

Un offset è un numero intero impostato nella query e mostra il numero di righe presenti sopra la riga corrente. Può essere una sottoquery o un'espressione.

La funzione LAG viene applicata alla partizione di valore, che è principalmente creata da una clausola di partizione. Allo stesso tempo, l'ordine per clausola viene utilizzato per disporre le righe in un ordine specificato.

Ci sono due caratteristiche principali della funzione LAG che abbiamo descritto qui sono:

  • LAG Partizione predefinita
  • La funzione di ritardo nelle partizioni.

LAG Partizione predefinita

Abbiamo un tavolo chiamato "Showroom" con i dettagli dei veicoli. La tabella è creata dalla query "Crea tabella" in PSQL e aggiungendo i dati utilizzando un'istruzione "Insert".

>> Seleziona * dallo showroom;

Applicheremo la funzione di ritardo sulla tabella. La funzione LAG contiene due o più istruzioni "seleziona". Dato che dobbiamo selezionare il valore prima della riga corrente, la riga corrente viene selezionata nel primo passaggio e quindi la riga prima di essa.

Esempio 1

In questo esempio, selezioneremo una colonna dalla tabella e calcoleremo la somma dalla colonna del prezzo. La seconda istruzione Select utilizzerà la funzione LAG. Entrambe queste affermazioni utilizzano la clausola "Ordine per" con "Gruppo per" nella funzione aggregata di selezione. Poiché nessun anno è simile all'altro, quindi tutte le righe verranno visualizzate. Non ci saranno raggruppamenti. Ora applichiamo il comando sulla tabella:

>> con CTE come (selezione anno, somma (prezzo) prezzo dal gruppo di showroom per ordine per anno) selezionare anno, prezzo, ritardo (prezzo, 1) oltre (ordine per anno) precedente_year_discount da CTE;

Per stampare il valore della riga sopra la riga corrente, abbiamo prima accesso alla riga corrente tramite l'istruzione Seleziona e abbiamo calcolato la funzione di somma. Il valore ottenuto è conservato in "CTE" per un ulteriore utilizzo in quest'ultima domanda. Il valore risultante sarà ordinato e raggruppato dalla colonna "anno".

Muovendosi verso la seconda istruzione selezionata, le stesse colonne in "CTE" sono selezionate dalla tabella. Una colonna aggiuntiva viene creata con il nome "Precedente_Year_Discount" con ritardo con 1 riga. E le righe della colonna risultante devono essere organizzate entro la colonna dell'anno.

Puoi vedere dalla tabella ottenuta che la prima riga nella nuova colonna è vuota. Perché il prezzo viene spostato alla riga successiva dall'inizio a rendere nullo la prima file.

Esempio 2

C'è un altro esempio; Qui, stiamo usando tre istruzioni selezionate. "CTE" e "CYE" vengono utilizzati per archiviare i valori ottenuti dalle due query utilizzando l'istruzione "Seleziona" e i loro valori risultanti verranno utilizzati nella terza istruzione selezionata. L'output di "CTE" funge da output per "CTE2". Allo stesso modo, "CTE2" sarà l'input per la terza istruzione selezionata. Tutti i valori vengono visualizzati nella tabella risultante combinati perché un risultato è una funzione di ritardo, mentre la seconda colonna risultante mostra la differenza tra i valori di due lag.

Muoversi verso il primo "CTE" calcola la stessa funzione dell'esempio precedente. La somma viene calcolata dalla colonna "prezzo".

>> con CTE AS (Select Year, Sum (Price) Price dal gruppo Showroom per ordine per anno),

Il secondo "CTE2" è simile al secondo comando selezionati perché sappiamo che la funzione di ritardo viene applicata sulla somma della colonna "Price". La colonna di quella somma "precedente_year_discount" è memorizzata come è in CTE.

>> CTE2 come (selezione anno, prezzo, ritardo (prezzo, 1) over (ordine per anno) precedente_year_discount da CTE)

La terza istruzione "seleziona" prenderà la somma ritardata dei prezzi e calcolerà la loro differenza. Ad esempio, il prezzo nella terza riga sottrae il valore nella seconda riga. Allo stesso tempo, la prima riga è nulla a causa della funzione di ritardo.

>> Seleziona anno, prezzo, precedente_year_discount, (precedente_year_discount - prezzo) Differenza da CTE;

La quarta colonna è denominata la differenza perché utilizza l'operatore meno per sottrarre i valori nella 3a colonna.

Per ogni riga, il valore dalla terza colonna viene sottratto dalla riga precedente. Ad esempio (3 ° -2 °), (4 ° -3 °) e così via. E il valore sottratto è scritto di fronte al primo valore (sottratto dal valore successivo). Ma nel 6 °, l'ultima riga nella colonna "Differenza", la risposta viene scritta che si ottiene sottraendo la prima riga dalla seconda riga, il valore dell'anno 2021.

Esempio 3

Considera un altro esempio in cui lo stesso concetto viene applicato alla tabella. Ma il ritardo è 2 invece di uno. Una singola istruzione selezionata visualizza i prezzi, non la somma o qualsiasi altra funzione aggregata.

>> selezionare anno, prezzo, ritardo (prezzo, 2) oltre (ordine per anno) sconto dallo showroom;

Il valore risultante mostra che il prezzo nella colonna di sconto viene spostato due righe. Significa che abbiamo acceduto alle righe prima della riga corrente della tabella.

Funzione di ritardo nelle partizioni

Via pgadmin

In PGADMIN, dopo aver fornito la password, è ora possibile accedere al database e a tutti i contenuti presenti in esso. Vai allo strumento di query dei tavoli. Ora crea nuovi nomi di tabelle "team_members".

>> Crea table team_members (nome varchar (100), id int, anno intero, intero salario);

Dopo aver creato la tabella, ora aggiungi valori alla tabella.

>> Inserisci in team_members (nome, id, anno, stipendio) valori ('salar', 1, 2018, 180000);

Dopo aver inserito i valori, ora applica la query.

La funzione Lag () in questo tipo confronta lo stipendio di un anno con l'ultimo anno di ciascun gruppo.

>> selezionare anno, stipendio, id, ritardo (stipendio, 1) su una partizione per ID (ordine per anno) sconto da team_members;

In questo esempio, gli ID sono raggruppati collettivamente. La partizione distribuirà le righe nel gruppo, come puoi vedere che tutti gli stessi ID sono presenti insieme. E la colonna di sconto mostra il confronto dello stipendio di una fila con la seconda riga, con il ritardo di 1.

Conclusione

La "funzione LAG" viene utilizzata per recuperare il record che è stato inserito prima della riga corrente selezionata. Qui sono discusse due principali categorie di funzionalità di ritardo. Seleziona, l'ordine per viene utilizzato in aggiunta con la "partizione per clausola". Questa funzione in PostgreSQL può essere applicata all'interno della tabella e quindi applicare diverse operazioni su di essi.