La funzione DENSE_RANK() ci consente di assegnare un rango univoco a ciascuna riga all'interno di un set di risultati in base ai valori in una colonna specificata. È molto simile alla funzione rango() ma con lievi differenze nel modo in cui la funzione gestisce i record duplicati.
In questo tutorial esploreremo come funziona questa funzione, la sintassi fornita e come possiamo utilizzarla in un database.
Come funziona
Cominciamo spiegando come funziona questa funzione. È bene tenere presente che la funzione è di alto livello e non possiamo spiegare l'implementazione sottostante.
La funzione funziona assegnando un rango a ciascuna riga nel set di risultati a partire dal rango 1 e aumentando di 1 per ogni valore univoco nelle colonne.
Alle righe con valori simili (duplicati) nelle colonne specificate viene assegnato lo stesso rango e alla riga successiva con valore diverso viene assegnato il successivo rango disponibile, senza spazi.
Come accennato, la funzione non lascia spazi vuoti in presenza di valori duplicati, il che la rende diversa dalla funzione rango().
Un uso comune della funzione dense_rank() è l'esecuzione di operazioni di classificazione. Ad esempio, possiamo usarlo per trovare i primi N record, ecc.
Sintassi della funzione:
Di seguito viene descritta la sintassi della funzione dense_rank():
DENSE_RANK() SOPRA ([PARTIZIONE PER espressione_partizione, ...]
ORDINE BY espressione_ordinamento [ASC | DESC], ...
)
Nella sintassi data:
- Iniziamo con la funzione dense_rank() stessa.
- La clausola OVER segnala l'inizio delle specifiche della funzione finestra. Ciò definisce il modo in cui la classifica viene applicata all'interno del set di risultati.
- PARTITION BY Partition_expression è una clausola opzionale che ci consente di partizionare il set risultante in gruppi o partizioni in base a una o più colonne. La classificazione viene applicata separatamente su ciascuna partizione e la classificazione viene reimpostata in una nuova partizione.
- ORDER BY sort_expression specifica l'ordine in cui desideriamo utilizzare per ordinare i dati nelle partizioni risultanti.
Dati campione
Per dimostrare come utilizzare la funzione dense_rank(), iniziamo con una tabella con dati di esempio. Nel nostro caso, utilizziamo una tabella “ordini” di esempio come segue:
Esempio 1: utilizzo della funzione Dense_Rank()
Possiamo utilizzare la funzione dense_rank() per classificare gli ordini risultanti in base al prezzo. Considera la seguente query di esempio:
SELEZIONAREID ordine,
nome_utente_cliente,
prodotto_acquistato,
DENSE_RANK() SOPRA (
ORDINE DI
prezzo DISC
) rango_prezzo
DA
ordini o;
Nell'esempio fornito, utilizziamo la funzione dense_rank() per classificare i dati in base al prezzo degli ordini. Omettiamo la clausola PARTITION BY perché non raggruppiamo i dati.
L'output risultante è il seguente:
Esempio 2: PARTIZIONE PER
Possiamo anche aggiungere la clausola PARTITION BY per raggruppare i dati in vari segmenti ad esempio in base al prodotto acquistato.
Una query di esempio è la seguente:
SELEZIONAREID ordine,
nome_utente_cliente,
prodotto_acquistato,
DENSE_RANK() SOPRA (
partizione per prodotto_acquistato
ORDINE DI
prezzo DISC
) rango_prezzo
DA
ordini o;
Ciò dovrebbe raggruppare i dati in vari gruppi in base ai gruppi risultanti e applicare la classificazione per gli elementi in ciascun gruppo.
Conclusione
In questo post abbiamo appreso le basi dell'utilizzo e del lavoro con la funzione finestra dense_rank() in SQL per assegnare un rango ai valori in base a colonne specifiche.