logo

SQL-palvelimen rivin numero -toiminto, jossa on PARTITION BY

Rivinumerotoiminto on yksi ikkunafunktioista, joita käytetään rivinumeroiden määrittämiseen kunkin osion riveille siinä järjestyksessä, jossa ne on lajiteltu osiossa käyttämällä OSIO lauseke, vain OSIO TILAUS lauseketta voidaan käyttää OVER-lauseen sisällä, jolloin koko taulukko katsotaan yhdeksi osioksi. Mutta ORDER BY -lauseke on pakollinen käytettäessä ROW_NUMBER() funktio, koska se järjestää osioiden rivit loogiseen järjestykseen ja myöhemmin ROW_NUMBER()-funktio voi määrittää rivin numeron. Jokaisessa osiossa rivinumero alkaa 1:stä.

Syntaksi:



ROW_NUMBER ( )

YLI ( [ OSIO SARAKE_1, sarake_2… ] ORDER BY sarake_3, sarake_4.. ASC tai DESC) AS sarakkeen_nimi

Funktion ROW_NUMBER() osat



  • OSIJOITTAJA: Tämä on pääalalauseke, joka jakaa rivit ikkunoihin ja kunkin rivin arvot ikkunan toiminnot sovelletaan lasketaan.
  • TILAUS: Tätä käytetään osion rivien järjestämiseen, oletusarvoisesti se on nousevassa järjestyksessä. Ilman ORDER BY -lausetta ROW_NUMBER()-funktio ei toimi.
  • Palautustyyppi: ROW_NUMBER()-funktion palautustyyppi on BIGINT.

ROW_NUMBER()-funktion käyttö

Vaihe 1: Luo tietokanta Geeksforgeeks käyttämällä seuraavaa SQL-kyselyä:

Kysely

CREATE DATABASE Geeksforgeeks>

Käytä GFG-tietokantaa.



Kysely

USE techcodeview.com>

Vaihe 3: Luo taulukko eri osien opiskelijoista, joiden kokonaispistemäärä on 500.

Kysely

CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT  );>

Vaihe 4: Lisää rivit taulukkoon:

Kysely

INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368),  (5, 'Geek15','C',295),  (6, 'Geek16','C',495);>

Vaihe 5: Tarkista taulukko

SELECT * FROM studentsSectionWise>

Lähtö:

opiskelijatSectionWise-taulukko

opiskelijatSectionWise taulukko

int merkkijonomuunnos Javassa

Käytetään ORDER_BY-lausetta ROW_NUMBER()-funktion kanssa

Yksinkertaisesti ORDER BY -lauseen käyttäminen nousevan tai laskevan mukaan pitää koko taulukkoa vain yhtenä osiona.

Tarkistetaan opiskelijoiden rankNumber ROW_NUMBER()-funktiolla ORDER BY -lauseella, joka sisältää kaikki osat:

SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>

Selitys: Kyselyssä olemme käyttäneet ORDER BY -lausetta studentMarksin kanssa, joka on järjestetty DESC-järjestyksessä.

Lähtö:

ulostulo

Lähtö

Selitys: Tuloksesta nähdään, että koko taulukko katsotaan yhdeksi osioksi ja rankNumber-numero on kasvavassa järjestyksessä studentMarksin kanssa laskevassa järjestyksessä.

Käytetty PARTITION_BY ROW_NUMBER()-funktion kanssa

Käyttämällä yksinkertaisesti PARTITION BY -lausetta ja taulukko eri osioihin sarakkeen nimen perusteella ja sitten ORDER BY -lausetta nousevalla tai laskevalla luvulla, koko taulukko pidetään vain yhtenä osiona. Ja sitten ROW_NUMBER() toimii jokaisen yksilöllisen numeron ykkösestä alkaen kussakin osiossa.

Tarkistetaan ranking-osio käyttämällä ROW_NUMBER()-funktiota PARTITION BY- ja ORDER BY -lauseiden kanssa.

SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>

Selitys: Käytössämme kyselyssä OSITUS lausekkeella osioidaksesi taulukon osiossa Name wise ja ORDER BY -lauseessa opiskelijamerkit, jotka on järjestetty DESC:ssä.

Lähtö:

ulostulo

Lähtö

Selitys: Tuloksessa näemme, että meillä on osiot jaettuna osiossa Name viisaasti ja sitten jokaisessa osiossa opiskelijat järjestetään opiskelijamerkkien perusteella DESC-järjestyksessä, ROW_NUMBER()-funktiolle on annettu rivinumero alkaen jokaisesta osiosta ja sitä kasvatetaan .

ROW_NUMBER() ymmärtäminen ilman PARTITION BY:tä

SQL Serverin ROW_NUMBER()-funktio on joustava työkalu, jonka avulla voit antaa jokaiselle tulosjoukon riville yksilöllisen rivinumeron. Se on yhtä tehokas, kun sitä käytetään ilman PARTITION BY -lausetta, vaikka sitä käytetään usein yhdessä sen kanssa osioiden ryhmittelyyn ja järjestykseen. Parametrin ROW_NUMBER() mahdollisuuksia ja käyttöä ilman PARTITION BY -lausetta käsitellään tässä artikkelissa.

Syntaksi:

VALITSE

ROW_NUMBER() OLLUT ( TILAA YourOrderByColumn) KUTEN rivinumero,

MuutSarakkeet

FROM

Sinun TaulukonNimi;

Tarkastellaan järjestysosiota ROW_NUMBER()-funktiolla ilman PARTITION BY- ja ORDER BY -lauseita.

SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>

Lähtö:

ulostulo

Lähtö

ROW_NUMBER():n käyttäminen rivien osajoukon hakemiseen

Funktion ROW_NUMBER() avulla voidaan saada rivien osajoukko taulukosta CTE:n avulla, mikä voi olla hyödyllistä tietojen sivuttamisessa.

Tarkastetaan jokaisen luokan 2 parasta sijoittajaa käyttämällä CTE (Yleinen taulukkolauseke) funktiolla ROW_NUMBER() :

WITH topTwoRankers AS  (   SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber  FROM studentsSectionWise  )  SELECT *  FROM topTwoRankers  WHERE rankNumber <=2;>

Selitys: Tässä kyselyssä olemme käyttäneet CTE-lauseketta saadakseen väliaikaisen taulukon yllä käytetystä kyselystä ja olemme käyttäneet ulompaa SELCT-kyselyä saadakseen opiskelijat, joiden rankNumber on pienempi tai yhtä suuri kuin 2.

Lähtö:

ulostulo

Lähtö

Selitys: Tuloksessa näemme, että meillä on kustakin osiosta kaksi parasta sijoitusta, jotka ovat edellisessä esimerkissä esitetystä kyselystä saadun taulukon osajoukko.

EdutROW_NUMBER()>Kanssa PARTITION BY

  1. Mahdollistaa edistyneen osion luokituksen.
  2. Ottaa käyttöön yksilöllisen rivinumeron tietyissä ryhmissä.
  3. Mahdollistaa suuremman joustavuuden olosuhteissa, joissa tarvitaan laajaa analysointia.

EdutROW_NUMBER()>Ilman PARTITION BY:tä

  1. Suoraviivaista ja yksinkertaista.
  2. helpottaa kohteiden luokittelua tietyn sarakkeen mukaan.
  3. Saattaa tarjota paremman suorituskyvyn, erityisesti pienemmille tulossarjoille.

Johtopäätös

Se on erittäin hyödyllinen, kun haluamme sekvensoida osion perusteella ja tehdä tarvittavat toiminnot. Käyttämällä TILAA lausekkeen mukaan on pakollinen käytettäessä ROW_NUMBER()-funktiota. Myös CTE:tä käyttämällä saamme taulukon osajoukot tilatuista osioista. ROW_NUMBER():n pääkäyttötapaus on rivien järjestys eri osioiden perusteella, mikä on erittäin hyödyllistä data-analyysitarkoituksiin.