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.

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.

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.