Postgresql raggruppa per

Postgresql Raggruppa Per



La clausola group by di Postgresql è una funzionalità che viene utilizzata per unire/combinare quelle righe nella tabella che hanno gli stessi dati. Questa clausola viene utilizzata principalmente per rimuovere i dati duplicati e per mantenere la concorrenza. Ogni volta che vogliamo calcolare la somma, o qualsiasi altro aggregato come AVG, ecc., questa clausola group by viene sempre utilizzata poiché ci sono molte clausole utilizzate in PostgreSQL. Ma esiste una gerarchia tra ogni clausola.

FROM > WHERE > “GRUPPO PER” > HAVING > SELEZIONA > DISTINTO > ORDINA PER > LIMITE

Il funzionamento di PostgreSQL si trova all'interno di 'where' e della clausola 'Having'.







Sintassi



SELEZIONA colonna

A PARTIRE DAL dumytable

DOVE [condizioni]

RAGGRUPPARE PER prima colonna, seconda colonna...

ORDINA PER prima colonna, seconda colonna.. ;

Esempio 1



Per comprendere il concetto di gruppo per funzione, usiamo un esempio qui. Nella tabella dei passeggeri, puoi vedere che i cognomi sono gli stessi per alcune persone. Ogni nome che è simile a un altro forma un gruppo e il loro pagamento viene aggiunto collettivamente a ogni stesso nome. Questo è elaborato nell'esempio seguente.





>> seleziona lname, SUM (pagamento) dal passeggero GROUP BY lname;

Il cognome del passeggero viene selezionato con l'uso di una funzione integrata 'SOMMA' che prende la colonna 'pagamento'. E aggiungi il pagamento per quelle persone che hanno lo stesso nome. Ad esempio, viene aggiunto lo stipendio di 'Javed' e 'saad'. Mentre per 'Malik' e 'Shams' è menzionato individualmente.



Allo stesso modo, considera una tabella 'ospedale'. Vogliamo raggruppare la città per età. In questo esempio, una città esiste più di una volta in una colonna. Ogni città è raggruppata con lo stesso nome di città. Le età di ogni gruppo della città vengono sommate e formano un'unica riga.

Ospedale:

>> seleziona città, SOMMA (età) dall'ospedale GRUPPO PER città;

Esempio 2

In alternativa, se selezioniamo il cognome con l'id dalla tabella passeggero, il risultato sarà una tabella diversa. Perché quando raggruppiamo entrambe le colonne insieme, verrà visualizzato il nome di ciascun passeggero perché l'id per ogni passeggero, anche con un cognome comune, è diverso. La somma è calcolata in una colonna separata, ma il pagamento di ogni passeggero è menzionato davanti al suo nome perché il raggruppamento di lname non viene fatto qui.

Questo è un esempio della clausola group by con più colonne. Perché quando vengono selezionate più colonne per il raggruppamento, il valore risultante viene modificato rispetto al gruppo di una singola tabella.

>> seleziona id, lname, SUM (pagamento) dal passeggero GROUP BY id, lname;

Dall'output, noterai una cosa che in primo luogo vengono visualizzati tutti quei lname che non sono comuni, quindi quelli che sono uguali sono menzionati nella tabella.

Esempio 3

Questo esempio ha una condizione di join e una clausola group by. Poiché viene utilizzato 'join', significa che qui abbiamo utilizzato due tabelle. Uno è 'articolo' e l'altro è 'ordini'.

Elementi:

Ordini:

Abbiamo utilizzato un metodo di concatenazione (utilizzato per unire due stringhe) per unire i valori di due colonne della tabella 'item' con '' e denominare collettivamente la colonna come 'descrizione'. È facoltativo; puoi prenderli separatamente. In questa query, la parola chiave 'USING' identifica la colonna specifica dell'altra tabella. L'indirizzo della tabella degli articoli viene abbinato alla colonna dell'indirizzo della tabella 'ordini'. Questo viene fatto creando un join tra due tabelle. Come negli esempi precedenti, entrambe le colonne verranno selezionate dalla clausola GROUP BY.

>> seleziona nome || ‘,’ || categoria come Descrizione, indirizzo dagli elementi inner join Ordini USING (indirizzo) GROUP BY indirizzo, Descrizione;

Puoi osservare che verranno selezionate 5 righe con l'indirizzo degli articoli abbinato all'indirizzo degli ordini. E poi, la colonna Descrizione verrà formata in corrispondenza con la colonna dell'indirizzo.

Allo stesso modo, c'è un altro esempio di concatenazione con il fattore età in due tabelle. Uno è 'passeggero' e l'altro è 'lavoratore'. La concatenazione è tra il nome e il cognome. Entrambi questi nomi sono separati dallo spazio tra due nomi. Abbiamo preso una parte del tavolo dei lavoratori qui.

Lavoratore:

La query funzionerà in modo che il punto in cui il nome f del lavoratore corrisponde al passeggero, l'età del passeggero, venga visualizzato nella colonna dell'età.

>> seleziona fname || ‘ ‘ || passeggero.lname come nome_completo, passeggero.età from passeggero INNER join worker USING (fname) GROUP BY nome_completo, passeggero.età ORDER BY passeggero.età;

Si forma una riga. Il nome completo viene creato unendo due colonne con uno spazio e viene selezionato l'indirizzo in cui il nome f del passeggero corrisponde al nome f del lavoratore.

Esempio 4

Questo esempio riguarda l'utilizzo di una funzione count () per contare gli id ​​della tabella 'items'. Questo è di nuovo raggruppato in base all'id della tabella.

>> Seleziona id, COUNT (id) FROM articoli GROUP BY id;

Le righe nella colonna id sono suddivise in gruppi. Ogni gruppo viene conteggiato nella colonna quante volte appare nella colonna. Nella tabella risultante viene creata una nuova colonna con un nome 'conteggio' e i valori del conteggio vengono scritti qui davanti a ciascun gruppo.

Il tuo pgAdmin

Ora abbiamo applicato alcuni esempi sul lato dashboard di PostgreSQL. Questi esempi sono diversi in qualche modo perché formano una riga di totale parziale dalla colonna originale quando uno qualsiasi degli elementi è diverso dagli altri, quindi il valore viene restituito come NULL.

Considera il primo esempio; qui, abbiamo creato un nome di colonna 'ALL' che ha combinato due colonne. Un indirizzo e una categoria. La colonna 'ALL' conta i valori in entrambe le colonne collettivamente. La colonna dell'indirizzo è raggruppata come 'aggiungi' e la colonna della categoria è raggruppata separatamente come 'gatto'. Poiché i nomi delle colonne di entrambe le tabelle utilizzate possono essere abbinati tra loro. Quindi ogni colonna della rispettiva tabella è accessibile da un oggetto specifico.

La condizione applicata al comando dipende dall'id e dal numero d'ordine. Se entrambi questi ID e numeri d'ordine sono gli stessi, i dati vengono recuperati. Allo stesso modo, viene aggiunta anche una condizione aggiuntiva per il nome.

>> SELECT o.address, category, count (*) AS “ALL”, GROUPING(o.address) AS “add” , GROUPING (category ) AS “cat” FROM elementi I, orders o dove i.order_no = o. order_id AND i.address= 'Lahore' GROUP BY CUBE (o.address, category) ORDER BY 1, 2;

Per la città di Lahore è selezionata una categoria. Ci sono 4 possibilità. A volte il giocattolo è presente ma non l'indirizzo. E viceversa. Ma esiste un tempo in cui sono presenti sia la categoria che l'indirizzo.

Ora, se cambiamo la condizione del nome da una tabella e scambiamo la tabella con un'altra. 'Items.address' è sostituito da 'order.address', quindi il risultato è diverso.

Conclusione

La clausola 'Postgresql group by' viene utilizzata per applicare qualsiasi operatore aggregato ai dati collettivi. Questo articolo usa la clausola group by con la funzione count, i join e la selezione e il raggruppamento di più colonne. Sono sicuro che questo tutorial sarà il miglior mezzo di comprensione per i lettori.