De RANK-functie in SQL Server is een soort rangschikkingsfunctie. Deze functie zal wijs het nummer toe aan elke rij binnen de partitie van een uitgang . Het wijst de rang aan elke rij toe als één plus de rang van de vorige rij. Wanneer de RANK-functie twee waarden vindt die identiek zijn binnen dezelfde partitie, wijst deze deze toe met hetzelfde rangnummer. Bovendien is het volgende nummer in de ranglijst de vorige rang plus dubbele nummers. Daarom wijst deze functie niet altijd de rangschikking van rijen in opeenvolgende volgorde toe.
arraylist java
De RANK-functie is ook een subonderdeel van vensterfuncties. Houd bij het gebruik van deze functie rekening met de volgende punten :
- Het werkt altijd met de OVER()-clausule.
- Het wijst een rang toe aan elke rij op basis van de ORDER BY-clausule.
- Het kent een rang toe aan elke rij in opeenvolgende volgorde.
- Het wijst altijd een rang toe aan rijen, te beginnen met één voor elke nieuwe partitie.
OPMERKING: Rank wijst tijdelijke waarden toe aan rijen binnen de partitie wanneer de query wordt uitgevoerd.
SQL Server biedt de volgende rangschikkingsfuncties :
- RANG()
- RIJ NUMMER()
- DENSE_RANK()
- NTILE()
Laten we elke rangfunctie in detail leren kennen. Eerst zullen we een tabel maken voor demonstratie van al deze functies. Met de volgende instructies wordt een tabel gemaakt met de naam rang_demo met drie kolommen:
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
Vervolgens zullen we enkele rijen in deze tabel invoegen, zoals hieronder:
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');
We kunnen de tabel verifiëren met behulp van de SELECT-instructie. Het toont de onderstaande uitvoer:
RANK()-functie
Deze functie wordt gebruikt om de rangorde voor elke rij in de resultatenset te bepalen. De volgende syntaxis illustreert het gebruik van een RANK-functie in SQL Server:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
In deze syntaxis wordt
- De OVER-clausule stelt de indeling en volgorde van een resultaat in voordat de bijbehorende vensterfunctie wordt toegepast.
- De PARTITION BY-clausule verdeelt de uitvoer die door de FROM-clausule wordt geproduceerd in de partitie. Vervolgens wordt de functie op elke partitie toegepast en opnieuw geïnitialiseerd wanneer de scheidingsgrens partities overschrijdt. Als we deze clausule niet hebben gedefinieerd, behandelt de functie alle rijen als één enkele partitie.
- De BESTEL DOOR is een vereiste clausule die de volgorde van de rijen op aflopende of oplopende wijze bepaalt op basis van een of meer kolomnamen voordat de functie wordt toegepast.
Voorbeeld
Laten we eens kijken hoe de functie RANK() werkt in SQL Server. De onderstaande verklaring gebruikt de rangfunctie om nummering aan elke rij toe te wijzen:
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Aangezien wij geen gebruik hebben gemaakt van de PARTITION BY-clausule , behandelde de functie het hele resultaat als een enkele partitie. Als u de instructie uitvoert, wordt de onderstaande uitvoer weergegeven:
In deze uitvoer kunnen we zien dat sommige rijen dezelfde rang krijgen omdat ze dezelfde waarde hebben in de stadskolom . En het volgende nummer in de ranglijst is de vorige rang plus een aantal dubbele nummers.
De volgende verklaring luidt een ander voorbeeld waar we een partitie per clausule gaan gebruiken die de rijen verdeelt op basis van de stad kolom en wijs een rangorde toe aan elke rij binnen een partitie. De volgorde van de uitvoer is gebaseerd op de Voornaam :
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Het zal de onderstaande uitvoer weergeven:
ROW_NUMBER() Functie
Deze functie wordt gebruikt retourneert het unieke volgnummer voor elke rij binnen zijn partitie. De rijnummering begint bij één en wordt met één verhoogd totdat het totale aantal rijen van de partitie is bereikt. Het retourneert de verschillende rangen voor de rij met vergelijkbare waarden waardoor deze verschilt van de functie RANK().
data structuur
De onderstaande syntaxis illustreert het gebruik van een functie ROW_NUMBER() in SQL Server:
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Voorbeeld
Voer de volgende query uit om aan elke rij een volgnummer toe te wijzen:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Het zal de rangorde voor de tafel toewijzen volgens hun stad . Hier kunnen we zien dat er verschillende rangen worden toegekend aan de rij met dezelfde stadswaarden.
Als we de sorteervolgorde wijzigen van stijgend naar dalend met de ORDER BY-clausule zal deze functie ook de RANK dienovereenkomstig wijzigen. Zie onderstaande verklaring:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Hier is het resultaat:
DENSE_RANK() Functie
Deze functie wijst toe een unieke rang voor elke rij binnen een partitie volgens de opgegeven kolomwaarde, zonder gaten. Het specificeert altijd de rangorde in opeenvolgende volgorde. Als we een dubbele waarde , zal deze functie het dezelfde rang toekennen, waarbij de volgende rang het volgende volgnummer is. Dit kenmerk verschilt de functie DENSE_RANK() van de functie RANK().
De onderstaande syntaxis illustreert het gebruik van een functie DENSE_RANK() in SQL Server:
SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Voorbeeld
De volgende query gebruikt de functie DENSE_RANK() om aan elke rij een rangnummer toe te wijzen:
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Het retourneert de onderstaande uitvoer waarin we kunnen zien dat de dubbele waarden dezelfde rang hebben en dat de volgende rang het volgende volgnummer is.
Het is een ander voorbeeld van de functie DENSE_RANK() met behulp van de PARTITION BY-clausule. Deze clausule verdeelt de rijen op basis van de stadskolom, en de volgorde van een resultatenset is gebaseerd op de voornaam:
lijst als array
SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo;
We krijgen de onderstaande uitvoer omdat geen twee namen hetzelfde zijn. In dit geval is de uitvoer vergelijkbaar met de functie RANK().
Laten we de naam bijwerken met de volgende query:
java-programmering wisselen
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Voer nu dezelfde query opnieuw uit. We zullen zien dat deze tabel dezelfde naam kreeg Californië stad . Daarom is de rang ook voor beide namen hetzelfde.
NTILE(N)-functie
Deze functie wordt gebruikt rijen van een geordende partitie verdelen in een vooraf gedefinieerd aantal (N) van ongeveer gelijke groepen. Elke rijgroep krijgt zijn rang op basis van de gedefinieerde voorwaarde en begint te nummeren vanaf één groep. Het wijst een emmer nummer voor elke rij in een groep die de groep vertegenwoordigt waartoe deze behoort.
De volgende syntaxis illustreert het gebruik van een NTILE()-functie in SQL Server:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Voorbeeld
De volgende query gebruikt de functie NTILE() om aan elke rij een rangnummer toe te wijzen:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
De opgegeven tabel heeft acht platen . Daarom, de NTILE(3) vertelt dat de resultatenset a moet hebben groep van drie records . Als u de instructie uitvoert, wordt de onderstaande uitvoer weergegeven:
In dit artikel worden alle RANK-functies uitgelegd die in de SQL Server worden gebruikt met verschillende voorbeelden. Het toont ook de belangrijkste verschillen tussen deze functies. Deze functies zijn erg handig voor ontwikkelaars om hun gegevens goed te verkennen en te beheren.