SQL Serverin RANK-funktio on eräänlainen ranking-funktio. Tämä toiminto tulee määritä numero jokaiselle riville tulosteen osion sisällä . Se määrittää jokaiselle riville arvon yhdeksi plus edellisen rivin sijoitukseksi. Kun RANK-funktio löytää kaksi identtistä arvoa samassa osiossa, se antaa niille saman järjestysnumeron. Lisäksi seuraava numero sijoituksessa on edellinen sijoitus plus kaksoisnumerot. Siksi tämä toiminto ei aina määritä rivien järjestystä peräkkäisessä järjestyksessä.
RANK-toiminto on myös osa ikkunatoimintoja. Seuraavat seikat tulee muistaa tätä toimintoa käytettäessä :
- Se toimii aina OVER()-lauseen kanssa.
- Se määrittää jokaiselle riville sijoituksen ORDER BY -lauseen perusteella.
- Se antaa sijoituksen jokaiselle riville peräkkäisessä järjestyksessä.
- Se määrittää aina sijoituksen riveille, alkaen yhdestä jokaiselle uudelle osiolle.
HUOMAUTUS: Rank määrittää väliaikaiset arvot osion riveille, kun kysely suoritetaan.
SQL Server tarjoaa seuraavat sijoitustoiminnot :
- RANK()
- ROW_NUMBER()
- DENSE_RANK()
- TILE()
Opitaan jokainen arvofunktio yksityiskohtaisesti. Ensin luomme taulukon kaikkien näiden toimintojen esittelyyn. Seuraavat lauseet luovat taulukon nimeltä rank_demo kolmella sarakkeella:
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
Seuraavaksi lisäämme joitain rivejä tähän taulukkoon seuraavasti:
jos muuten java
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');
Voimme tarkistaa taulukon SELECT-käskyllä. Se näyttää alla olevan tulosteen:
RANK()-funktio
Tätä funktiota käytetään määrittämään tulosjoukon kunkin rivin sijoitus. Seuraava syntaksi havainnollistaa RANK-funktion käyttöä SQL Serverissä:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Tässä syntaksissa
- The OVER-lauseke määrittää tuloksen osioinnin ja järjestyksen ennen kuin siihen liittyvä ikkunatoiminto otetaan käyttöön.
- The OSITUS lausekkeella jakaa FROM-lauseen tuottamat tulokset osioon. Sitten toimintoa sovelletaan jokaiseen osioon ja alustetaan uudelleen, kun osion raja ylittää osiot. Jos emme ole määrittäneet tätä lauseketta, funktio käsittelee kaikkia rivejä yhtenä osiona.
- The TILAA on pakollinen lauseke, joka määrittää rivien järjestyksen laskevalla tai nousevalla tavalla yhden tai useamman sarakkeen nimen perusteella ennen funktion käyttöä.
Esimerkki
Katsotaanpa, kuinka RANK()-funktio toimii SQL Serverissä. Alla oleva lauseke käyttää rank-funktiota numeroinnin määrittämiseen kullekin riville:
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Koska emme ole käyttäneet OSITUS lausekkeella , funktio käsitteli koko tuloksen yhtenä osiona. Lausunnon suorittaminen näyttää seuraavan tulosteen:
Tässä tulosteessa voimme nähdä, että joillakin riveillä on sama arvo, koska niillä on sama arvo kaupungin pylväs . Ja seuraava numero sijoituksessa on sen edellinen sijoitus plus useita kaksoisnumeroita.
Seuraava lausunto on toinen esimerkki jossa aiomme käyttää osiota lausekkeen mukaan, joka jakaa rivit kaupunki sarakkeessa ja määritä sijoitus jokaiselle osion riville. Tulostuksen järjestys perustuu etunimi :
java equals -menetelmä
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Se näyttää alla olevan tulosteen:
ROW_NUMBER() Funktio
Tämä toiminto on tottunut palauttaa kunkin rivin yksilöllisen järjestysnumeron sen osion sisällä. Rivien numerointi alkaa ykkösestä ja kasvaa yhdellä, kunnes osion rivien kokonaismäärä on saavutettu. Se palauttaa eri arvot riville, jolla on samanlaiset arvot, jotka tekevät siitä erilaisen kuin RANK()-funktio.
Python lajittelee tuples
Alla oleva syntaksi havainnollistaa ROW_NUMBER()-funktion käyttöä SQL Serverissä:
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Esimerkki
Suorita seuraava kysely määrittääksesi järjestysnumeron jokaiselle riville:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Se määrittää taulukon sijoituksen heidän mukaansa kaupunki . Tässä näemme, että se antaa eri arvoja riville, jolla on samat kaupunkiarvot.
Jos muutamme lajittelujärjestystä nousevasta laskevaan ORDER BY -lauseen kanssa tämä toiminto muuttaa myös RANKia vastaavasti. Katso alla oleva lausunto:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Tässä on tulos:
DENSE_RANK() Funktio
Tämä toiminto määrittää yksilöllinen sijoitus jokaiselle osion riville määritetyn sarakkeen arvon mukaan ilman aukkoja. Se määrittää aina sijoituksen peräkkäisessä järjestyksessä. Jos saamme a päällekkäinen arvo , tämä toiminto antaa sille saman arvon, ja seuraava arvo on seuraava järjestysnumero. Tämä ominaisuus eroaa DENSE_RANK()-funktiosta RANK()-funktiosta.
char to int
Alla oleva syntaksi havainnollistaa DENSE_RANK()-funktion käyttöä SQL Serverissä:
SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Esimerkki
Seuraava kysely käyttää DENSE_RANK()-funktiota jokaiselle riville järjestysnumeron määrittämiseen:
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Se palauttaa alla olevan tulosteen, jossa voimme nähdä, että päällekkäisillä arvoilla on sama arvo, ja seuraava arvo on seuraava järjestysnumero.
Se on toinen esimerkki DENSE_RANK()-funktiosta, jossa käytetään PARTITION BY -lausetta. Tämä lauseke jakaa rivit kaupunkisarakkeen perusteella, ja tulosjoukon järjestys perustuu etunimikkeeseen:
SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo;
Saamme alla olevan tulosteen, koska kaksi samanlaista nimeä ei ole. Tässä tapauksessa tulos on samanlainen kuin RANK()-funktio.
Päivitetään nimi seuraavalla kyselyllä:
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Suorita nyt sama kysely uudelleen. Näemme, että tällä taulukolla on sama nimi Kalifornian kaupunki . Siksi myös arvo on sama molemmilla nimillä.
TILE(N) -toiminto
Tämä toiminto on tottunut jakaa järjestetyn osion rivit ennalta määritettyyn numeroon (N) suunnilleen samansuuruisista ryhmistä. Jokainen riviryhmä saa sijoituksensa määritellyn ehdon perusteella ja aloittaa numeroinnin yhdestä ryhmästä. Se määrittää a kauhan numero jokaiselle riville ryhmässä, joka edustaa ryhmää, johon se kuuluu.
Seuraava syntaksi havainnollistaa NTILE()-funktion käyttöä SQL Serverissä:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Esimerkki
1/1000
Seuraava kysely käyttää NTILE()-funktiota jokaiselle riville järjestysnumeron määrittämiseen:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
Määritetyssä taulukossa on kahdeksan levyä . Siksi TILE(3) kertoo, että tulosjoukossa on oltava a kolmen levyn ryhmä . Lausunnon suorittaminen näyttää seuraavan tulosteen:
Tässä artikkelissa selitetään kaikki SQL Serverissä käytetyt RANK-toiminnot eri esimerkein. Se näyttää myös tärkeimmät erot näiden toimintojen välillä. Nämä toiminnot ovat erittäin hyödyllisiä kehittäjille, kun he voivat tutkia ja hallita tietojaan hyvin.