logo

SQL serverio eilutės_numerio funkcija su PARTITION BY

Eilutės numerio funkcija yra viena iš lango funkcijų, naudojamų priskirti eilutės numerį kiekvienos skaidinio eilutėms tokia tvarka, kokia jos buvo surūšiuotos skaidinyje naudojant SKYRIUS sąlyga, tik SKAITINIMAS ĮSAKYMAS sąlyga gali būti naudojama OVER sakinyje, tokiu atveju visa lentelė bus laikoma vienu skaidiniu. Tačiau ORDER BY sąlyga yra privaloma naudojant ROW_NUMBER () funkcija, nes ji išdėsto eilutes skaidiniuose tokia logine tvarka, o vėliau funkcija ROW_NUMBER() gali priskirti eilutės numerį. Kiekviename skyriuje eilutės numeris prasideda nuo 1.

Sintaksė:



ROW_NUMBER ( )

OVER ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC arba DESC) AS stulpelio_pavadinimas

Funkcijos ROW_NUMBER() komponentai



  • SKYRIUS: Tai yra pagrindinis poskyris, skirstantis eilutes į langus ir kiekvienos eilutės reikšmes lango funkcijos taikoma bus skaičiuojama.
  • RŪŠIUOTI PAGAL: Tai naudojama eilučių išdėstymui skaidinyje, pagal numatytuosius nustatymus tai yra didėjančia tvarka. Be sąlygos ORDER BY funkcija ROW_NUMBER() neveikia.
  • Grąžinimo tipas: Funkcijos ROW_NUMBER() grąžinimo tipas yra BIGINT.

Funkcijos ROW_NUMBER() naudojimas

1 žingsnis: Sukurkite duomenų bazę Geeksforgeeks naudodami šią SQL užklausą:

Užklausa

CREATE DATABASE Geeksforgeeks>

Naudokite GFG duomenų bazę.



Užklausa

USE techcodeview.com>

3 veiksmas: Sukurkite lentelę su skirtingų skyrių mokiniais, kurių bendras balas iš 500.

Užklausa

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

4 veiksmas: Įveskite eilutes į lentelę:

Užklausa

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);>

5 veiksmas: Patikrinkite lentelę

SELECT * FROM studentsSectionWise>

Išvestis:

studentų skyrius „Išmintinga lentelė“.

studentaiSkyriusIšmintingas stalas

css centrinis mygtukas

Naudojant sąlygą ORDER_BY su ROW_NUMBER() funkcija

Naudojant tiesiog sąlygą ORDER BY su didėjančia arba mažėjančia tvarka, visa lentelė laikoma tik vienu skaidiniu.

Patikrinkime studentų rangąNumber naudodami funkciją ROW_NUMBER() su sąlyga ORDER BY, įskaitant visas dalis:

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

Paaiškinimas: Užklausoje naudojome ORDER BY sakinį su studentais Marks, kuris yra išdėstytas DESC tvarka.

Išvestis:

išvestis

Išvestis

Paaiškinimas: Rezultate matome, kad visa lentelė laikoma vienu skaidiniu, o rangNumber skaičius yra didėjančia tvarka, o studentų žymės – mažėjančia tvarka.

Naudojamas PARTITION_BY su ROW_NUMBER() funkcija

Naudojant paprasčiausią sąlygą PARTITION BY padalijame ir lentelę į skirtingus skaidinius pagal stulpelio pavadinimą ir ORDER BY sąlygą su didėjančia arba mažėjančia tvarka, visa lentelė laikoma tik vienu skaidiniu. Ir tada ROW_NUMBER() atlieka kiekvieną unikalų skaičių, pradedant nuo 1 kiekviename skaidinyje.

Patikrinkime reitingavimo skyrių naudodami funkciją ROW_NUMBER() su PARTITION BY ir ORDER BY sakiniais.

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

Paaiškinimas: Užklausoje, kurią naudojome SKYRIUS pagal sąlygą padalinti lentelę skiltyjeName wise ir ORDER BY sakinyje su studentaisŽenklai, kurie yra išdėstyti DESC.

Išvestis:

išvestis

Išvestis

Paaiškinimas: Rezultate matome, kad skaidiniai yra padalinti iš sekcijosPavadinimas, o tada kiekviename skirsnyje mokiniai yra suskirstyti pagal studento pažymius DESC tvarka, funkcijai ROW_NUMBER() priskiriamas eilutės numeris pradedant nuo kiekvieno skaidinio ir jis didėja. .

ROW_NUMBER() supratimas be PARTITION BY

SQL serverio funkcija ROW_NUMBER() yra lankstus įrankis, leidžiantis kiekvienai rezultatų rinkinio eilutei pateikti unikalų eilutės numerį. Jis taip pat veiksmingas, kai naudojamas be PARTITION BY sąlygos, net jei jis dažnai naudojamas kartu su juo grupuojant ir reitinguojant skaidiniuose. Šiame straipsnyje bus aptariamos ROW_NUMBER() galimybės ir naudojimas be sąlygos PARTITION BY.

Sintaksė:

PASIRINKTI

ROW_NUMBER() PABAIGTA ( RŪŠIUOTI PAGAL Jūsų užsakymas pagal stulpelį) AS Eilutės skaičius,

KitiStulpeliai

NUO

Jūsų lentelės pavadinimas;

Patikrinkime reitingavimo skyrių naudodami funkciją ROW_NUMBER() be PARTITION BY ir ORDER BY sąlygų.

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

Išvestis:

išvestis

Išvestis

ROW_NUMBER() naudojimas norint gauti eilučių poaibį

Funkcija ROW_NUMBER() gali būti naudojama norint gauti lentelės eilučių poaibį naudojant CTE, kuris gali būti naudingas duomenų puslapių rūšiavimo atveju.

Patikrinkime 2 geriausius kiekvienos klasės reitinguotojus naudodami CTE (bendra lentelės išraiška) su ROW_NUMBER() funkcija:

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

Paaiškinimas: Užklausoje naudojome CTE išraišką, kad gautume laikinąją lentelę iš anksčiau naudotos užklausos, o išorinę SELCT užklausą naudojome, kad gautume studentus, kurių rango skaičius yra mažesnis arba lygus 2.

Išvestis:

išvestis

Išvestis

Paaiškinimas: Rezultate matome, kad kiekvienoje skiltyje yra 2 geriausi reitinguotojai, kurie yra lentelės, gautos iš ankstesniame pavyzdyje pateiktos užklausos, poaibis.

Privalumai išROW_NUMBER()>Su PARTITION BY

  1. Leidžia išplėsti skirsnių reitingą.
  2. Įgalina unikalų eilučių numeravimą konkrečiose grupėse.
  3. Suteikia daugiau lankstumo aplinkybėmis, reikalaujančiomis išsamios analizės.

Privalumai išROW_NUMBER()>Be PARTITION BY

  1. Tiesus ir paprastas.
  2. leidžia lengvai reitinguoti elementus pagal tam tikrą stulpelį.
  3. Gali pasiūlyti geresnį našumą, ypač mažesniems rezultatų rinkiniams.

Išvada

Tai labai naudinga, kai norime seką atlikti skaidinio pagrindu ir atlikti reikiamas operacijas. Naudojant UŽSAKYTI PAGAL sąlygą yra privalomas naudojant funkciją ROW_NUMBER(). Taip pat naudodami CTE galime gauti lentelės poaibius iš užsakytų skaidinių. Pagrindinis ROW_NUMBER() naudojimo atvejis yra eilučių reitingavimas pagal skirtingus skaidinius, o tai labai naudinga duomenų analizės tikslais.