La funció RANK a SQL Server és una mena de funció de classificació. Aquesta funció serà assigneu el número a cada fila dins de la partició d'una sortida . Assigna el rang a cada fila com un més el rang de fila anterior. Quan la funció RANK troba dos valors idèntics dins de la mateixa partició, els assigna el mateix número de classificació. A més, el següent número de la classificació serà la classificació anterior més els números duplicats. Per tant, aquesta funció no sempre assigna la classificació de les files en ordre consecutiu.
La funció RANK també és una subpart de les funcions de la finestra. S'han de tenir en compte els punts següents quan utilitzeu aquesta funció :
- Sempre funciona amb la clàusula OVER().
- Assigna un rang a cada fila en funció de la clàusula ORDER BY.
- Assigna un rang a cada fila en ordre consecutiu.
- Sempre assigna un rang a les files, començant per un per a cada partició nova.
NOTA: Rank assigna valors temporals per a les files dins de la partició quan s'executa la consulta.
SQL Server proporciona les següents funcions de classificació :
exemple de format json
- RANK()
- ROW_NUMBER()
- DENSE_RANK()
- NTILE()
Aprenem cada funció de rang en detall. Primer, crearem una taula per a la demostració de totes aquestes funcions. Les declaracions següents creen una taula anomenada rank_demo amb tres columnes:
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
A continuació, inserirem algunes files en aquesta taula de la següent manera:
INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California');
Podem verificar la taula mitjançant la instrucció SELECT. Mostra la sortida següent:
Funció RANK().
Aquesta funció s'utilitza per determinar el rang de cada fila del conjunt de resultats. La sintaxi següent il·lustra l'ús d'una funció RANK a SQL Server:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
En aquesta sintaxi,
- El clàusula OVER estableix la partició i l'ordenació d'un resultat abans que s'apliqui la funció de finestra associada.
- El clàusula PARTITION BY divideix la sortida que produeix la clàusula FROM a la partició. A continuació, la funció s'aplica a cada partició i es reinicia quan la frontera de la divisió creua les particions. Si no hem definit aquesta clàusula, la funció tractarà totes les files com una única partició.
- El DEMANAT PER és una clàusula obligatòria que determina l'ordre de les files de manera descendent o ascendent en funció d'un o més noms de columnes abans que s'apliqui la funció.
Exemple
Vegem com funciona la funció RANK() a SQL Server. La instrucció següent utilitzarà la funció de classificació per assignar la numeració a cada fila:
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Com que no hem utilitzat el clàusula PARTITION BY , la funció va tractar tot el resultat com una sola partició. En executar la instrucció es mostrarà la sortida següent:
conté una subcadena java
En aquesta sortida, podem veure que algunes de les files tenen el mateix rang perquè tenen el mateix valor en el columna de la ciutat . I el següent número de la classificació serà la seva classificació anterior més un nombre de números duplicats.
La següent afirmació és un altre exemple on farem servir una partició per clàusula que dividirà les files en funció del ciutat columna i assigneu una classificació a cada fila d'una partició. L'ordre de la sortida es basa en nom :
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Mostrarà la següent sortida:
Funció ROW_NUMBER().
Aquesta funció s'utilitza per retorna el número seqüencial únic per a cada fila dins la seva partició. La numeració de files comença a un i augmenta en una fins que s'arriba al nombre total de files de la partició. Retornarà els diferents rangs per a la fila amb valors similars que la fan diferent de la funció RANK().
La sintaxi següent il·lustra l'ús d'una funció ROW_NUMBER() a SQL Server:
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Exemple
Executeu la consulta següent per assignar un número de seqüència per a cada fila:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Assignarà la classificació de la taula segons el seu ciutat . Aquí podem veure que assigna diferents rangs per a la fila que té els mateixos valors de ciutat.
Si canviem l'ordre de classificació de ascendent a descendent amb la clàusula ORDER BY, aquesta funció també canviarà el RANK en conseqüència. Vegeu la declaració següent:
poda a-b
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Aquí teniu el resultat:
Funció DENSE_RANK().
Aquesta funció assigna un rang únic per a cada fila dins d'una partició segons el valor de la columna especificat sense cap espai. Sempre especifica la classificació en ordre consecutiu. Si aconseguim un valor duplicat , aquesta funció l'assignarà amb el mateix rang, i el següent rang serà el següent número seqüencial. Aquesta característica difereix la funció DENSE_RANK() de la funció RANK().
operadors en programació Python
La sintaxi següent il·lustra l'ús d'una funció DENSE_RANK() a SQL Server:
SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Exemple
La consulta següent utilitza la funció DENSE_RANK() per assignar un número de classificació per a cada fila:
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Retornarà la sortida següent on podem veure que els valors duplicats tenen el mateix rang, i el rang següent serà el següent número seqüencial.
És un altre exemple de la funció DENSE_RANK() utilitzant la clàusula PARTITION BY. Aquesta clàusula dividirà les files en funció de la columna de la ciutat i l'ordre d'un conjunt de resultats es basa en el primer_nom:
SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo;
Obtindrem la sortida següent perquè no hi ha dos noms iguals. En aquest cas, la sortida és similar a la funció RANK().
Actualitzem el nom amb la consulta següent:
preity zinta
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Ara, torneu a executar la mateixa consulta. Veurem que aquesta taula porta el mateix nom Ciutat de Califòrnia . Per tant, el rang també és el mateix per als dos noms.
Funció NTILE(N).
Aquesta funció s'utilitza per distribuïu les files d'una partició ordenada en un nombre predefinit (N) de grups aproximadament iguals. Cada grup de files obté el seu rang en funció de la condició definida i comença a numerar des d'un grup. S'assigna a número de galleda per a cada fila d'un grup que representi el grup al qual pertany.
La sintaxi següent il·lustra l'ús d'una funció NTILE() a SQL Server:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Exemple
La consulta següent utilitza la funció NTILE() per assignar un número de classificació per a cada fila:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
La taula especificada té vuit registres . Per tant, el NTILE(3) diu que el conjunt de resultats ha de tenir a grup de tres discos . En executar la instrucció es mostrarà la sortida següent:
Aquest article explicarà totes les funcions RANK utilitzades al servidor SQL amb diversos exemples. També mostra les principals diferències entre aquestes funcions. Aquestes funcions són molt útils per als desenvolupadors per explorar i gestionar bé les seves dades.