Inserire una colonna contatore in una Select di Oracle

Vediamo come fare per inserire una colonna contatore all’interno di una query Oracle

contare-t22117

Sono due i metodi che ci consentono di inserire un contatore in una query, e sono il count(*) e il row_number(). Vediamoli entrambi.

Il COUNT(*)

Il count è semplicemente un contatore di righe aggregate, esso visualizza un numero in base a come si costruisce la query. Se per esempio scriviamo

SELECT COUNT(*) FROM PERSONE

avremo come risultato una sola riga con una sola colonna contenente il numero di righe presenti nella tabella PERSONE, considerando anche le righe duplicate e le righe null.

Possiamo usarla per contare i raggruppamenti, per esempio per contare il numero di maschi e il numero di femmine all’interno della tabella PERSONE, in questo modo

SELECT SESSO, COUNT(*) FROM PERSONE GROUP BY SESSO

Questa query ci mostrerà i sessi disponibili in tabella, e il conteggio delle persone per ogni sesso.

Questo è il count. Semplice e veloce.

COUNT(campo)

Questo utilizzo del count ci permette di ottenere il conteggio di tutti i valori non nulli riguardo il campo indicato, inclusi i duplicati.

Su una tabella così costruita

RIGANOMECOGNOMEANNI
1FrancescoMartinelli18
2FrancescoPower19
3Rossi18
4VincenzoBianchi23

Avendo volutamente lasciato vuoto il campo NOME della riga 3, la seguente query

SELECT COUNT(NOME) FROM PERSONE

restituirà il valore 3, in quanto solo in una riga il campo NOME è vuota

COUNT(DISTINCT(campo))

Questo utilizzo del count ci permette di ottenere il conteggio di tutti i valori non nulli riguardo il campo indicato, escludendo i duplicati.

Utilizzando la stessa tabella di prima

RIGANOMECOGNOMEANNI
1FrancescoMartinelli18
2FrancescoPower19
3Rossi18
4VincenzoBianchi23

la seguente query

SELECT COUNT(DISTINCT(NOME)) FROM PERSONE

restituirà il valore 2, in quanto nella colonna NOME un campo è vuoto, mentre nelle righe 1 e 2 avendo lo stesso valore ed avendo usato la funzione DISTINCT che elimina i duplicati, andrà a conteggiare solo 2 valori.

Il ROW_NUMBER()

Questa funzione è molto più evoluta del COUNT(*). Essa ci permette di avere un contatore che può avere un reset in base ad un set di colonne, e può eseguire un conteggio che può essere di natura differente dall’ORDER BY finale.

La sintassi da utilizzare è

ROW_NUMBER() OVER (PARTITION BY [Colonne di reset] ORDER BY [Colonne d'ordine])

Le [Colonne di reset] sono il set di colonne che serve per far ripartire il contatore da 1. Se ad esempio si imposta una coppia di colonne, appena la coppia varia alla riga successiva il contatore si resetta ritornando ad 1. Nel caso non vogliamo avere un reset, dobbiamo sostiture [Colonne di reset] con 1.

Le [Colonne d’ordine] sono il set di colonne che serve su cui basarsi con il conteggio. Se per esempio vogliamo una query ordinata per COGNOMI, ma vogliamo eseguire un conteggio per NOMI, allora l’ORDER BY finale della query deve contenere COGNOMI, mentre l’ORDER BY del nostro ROW_NUMBER deve contenere i NOMI.

Non va necessariamente utilizzata in query raggruppate o ordinate.

Controlliamo ciclicamente il funzionamento dei link nei nostri articoli. Se noti dei link che non funzionano segnalacelo tra i commenti. Se hai apprezzato l'articolo considera l'idea di sostenere il blog anche con una piccola donazione. Grazie. Patreon / Ko-fi / Liberapay / Paypal

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *