La funció DENSE_RANK() ens permet assignar un rang únic a cada fila dins d'un conjunt de resultats en funció dels valors d'una columna més especificada. És molt semblant a la funció rank() però amb lleugeres diferències en com la funció gestiona els registres duplicats.
En aquest tutorial, explorarem com funciona aquesta funció, la sintaxi proporcionada i com podem utilitzar-la en una base de dades.
Com funciona
Comencem explicant com funciona aquesta funció. És bo tenir en compte que la funció és d'alt nivell i no podem explicar la implementació subjacent.
La funció funciona assignant un rang a cada fila del conjunt de resultats a partir del rang 1 i augmentant en 1 per a cada valor únic de les columnes.
Les files amb valors similars (duplicats) a les columnes especificades s'assignen amb la mateixa classificació i la següent fila amb un valor diferent s'assigna amb la següent classificació disponible, sense cap espai.
Com hem esmentat, la funció no deixa buits on hi ha valors duplicats, cosa que la fa diferent de la funció rank().
Un ús comú de la funció dense_rank() és realitzar les operacions de classificació. Per exemple, el podem utilitzar per trobar els N registres principals, etc.
Sintaxi de la funció:
A continuació es descriu la sintaxi de la funció dense_rank():
DENSE_RANK() SOBRE ([PARTICIÓ PER expressió_partició,...]
COMANDA PER expressió_ordenar [ASC | DESC],...
)
En la sintaxi donada:
- Comencem amb la funció dense_rank() en si.
- La clàusula OVER indica l'inici de les especificacions de la funció de la finestra. Això defineix com s'aplica la classificació dins del conjunt de resultats.
- L'expressió_partició PARTITION BY és una clàusula opcional que ens permet dividir el conjunt resultant en grups o particions basats en una o més columnes. La classificació s'aplica per separat a cada partició i la classificació es reinicia en una nova partició.
- L'expressió ORDER BY especifica l'ordre en què volem utilitzar per ordenar les dades a les particions resultants.
Dades de mostra
Per demostrar com utilitzar la funció dense_rank(), comencem amb una taula amb dades de mostra. En el nostre cas, utilitzem una taula de 'comandes' d'exemple de la següent manera:
Exemple 1: ús de la funció Dense_Rank().
Podem utilitzar la funció dense_rank() per classificar les comandes resultants en funció del preu. Considereu la consulta d'exemple següent:
SELECCIONAorder_id,
nom_usuari_client,
producte_comprat,
DENSE_RANK() SOBRE (
COMANDA PER
preu DISC
) rang_preu
DE
ordres o;
A l'exemple donat, utilitzem la funció dense_rank() per classificar les dades en funció del preu de les comandes. Ometem la clàusula PARTITION BY perquè no agrupem les dades.
La sortida resultant és la següent:
Exemple 2: PARTICIÓ PER
També podem afegir la clàusula PARTITION BY per agrupar les dades en diversos segments, com ara segons el producte comprat.
Un exemple de consulta és el següent:
SELECCIONAorder_id,
nom_usuari_client,
producte_comprat,
DENSE_RANK() SOBRE (
partició per producte_comprat
COMANDA PER
preu DISC
) rang_preu
DE
ordres o;
Això hauria d'agrupar les dades en diversos grups en funció dels grups resultants i aplicar la classificació dels ítems de cada grup.
Conclusió
En aquesta publicació, hem après els fonaments d'utilitzar i treballar amb la funció de finestra dense_rank() a SQL per assignar una classificació als valors basats en columnes específiques.