Rindas numura funkcija ir viena no loga funkcijām, ko izmanto, lai piešķirtu rindas numuru rindām katrā nodalījumā tādā secībā, kādā tās tika sakārtotas nodalījumā, izmantojot NODAĻA klauzula, tikai NODAĻA PASŪTĪT klauzulu var izmantot OVER klauzulas iekšpusē, tādā gadījumā visa tabula tiks uzskatīta par vienu nodalījumu. Bet ORDER BY klauzula ir obligāta, lai izmantotu ROW_NUMBER() funkcija, jo tā sakārto rindas nodalījumos tādā loģiskā secībā, un vēlāk funkcija ROW_NUMBER() var piešķirt rindas numuru. Katrā nodalījumā rindas numurs sākas ar 1.
Sintakse:
ROW_NUMBER ( )
OVER ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC vai DESC) AS kolonnas_nosaukums
Funkcijas ROW_NUMBER() komponenti
- SADALĪJUMS: Šī ir galvenā apakšklauzula, kas sadala rindas logos un katras rindas vērtības logu funkcijas tiks aprēķināts.
- SAKĀRTOT PĒC: To izmanto, lai sakārtotu rindas nodalījumā, pēc noklusējuma tā ir augošā secībā. Bez klauzulas ORDER BY funkcija ROW_NUMBER() nedarbojas.
- Atgriešanas veids: Funkcijas ROW_NUMBER() atgriešanas veids ir BIGINT.
Funkcijas ROW_NUMBER() izmantošana
1. darbība: Izveidojiet datubāzi Geeksforgeeks, izmantojot šādu SQL vaicājumu:
Vaicājums
CREATE DATABASE Geeksforgeeks>
Izmantojiet GFG datu bāzi.
Vaicājums
USE techcodeview.com>
3. darbība: Izveidojiet tabulu ar dažādu nodaļu skolēniem ar kopējo punktu skaitu no 500.
Vaicājums
CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT );>
4. darbība: Ievietojiet rindas tabulā:
Vaicājums
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. darbība: Pārbaudiet tabulu
SELECT * FROM studentsSectionWise>
Izvade:

studentiSadaļaWise tabula
java nosaukumu piešķiršanas konvencija
Tiek izmantota klauzula ORDER_BY ar ROW_NUMBER() funkciju
Izmantojot vienkāršu klauzulu ORDER BY ar augošu vai dilstošu secību, visa tabula tiek uzskatīta tikai par vienu nodalījumu.
Pārbaudīsim studentu ranguNumber, izmantojot funkciju ROW_NUMBER() ar klauzulu ORDER BY, ieskaitot visas sadaļas:
SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Paskaidrojums: Vaicājumā esam izmantojuši ORDER BY klauzulu ar studentiemMarks, kas ir sakārtots DESC secībā.
Izvade:

Izvade
Paskaidrojums: Rezultātā redzams, ka visa tabula tiek uzskatīta par vienu nodalījumu un rankNumber numurs ir augošā secībā, studentiMarks dilstošā secībā.
Tiek izmantots PARTITION_BY ar ROW_NUMBER() funkciju
Izmantojot vienkārši klauzulu PARTITION BY, tabula tiek sadalīta dažādos nodalījumos, pamatojoties uz kolonnas nosaukumu, un pēc tam ORDER BY klauzulu ar augošu vai dilstošu secību, visa tabula tiek uzskatīta tikai par vienu nodalījumu. Un tad ROW_NUMBER() funkcionē katrs unikālais numurs, sākot no 1 katrā nodalījumā.
Pārbaudīsim ranžēšanas sadaļu, izmantojot funkciju ROW_NUMBER() ar klauzulām PARTITION BY un ORDER BY.
SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>
Paskaidrojums: Mūsu izmantotajā vaicājumā NODAĻA PĒC klauzulas sadalīt tabulu sadaļāNosaukums gudrs un ORDER BY klauzula ar studentiemMarks, kas ir sakārtots DESC.
Izvade:

Izvade
Paskaidrojums: Rezultātā redzams, ka mums ir nodalījumi, kas sadalīti ar sadaļuNosaukums, un pēc tam katrā nodalījumā studenti tiek sakārtoti, pamatojoties uz studenta atzīmēm DESC secībā, funkcijai ROW_NUMBER() ir piešķirts rindas numurs, sākot no katrā nodalījumā, un tas tiek palielināts. .
ROW_NUMBER() izpratne bez PARTITION BY
SQL Server funkcija ROW_NUMBER() ir elastīgs rīks, kas ļauj katrai rezultātu kopas rindai nodrošināt unikālu rindas numuru. Tas ir vienlīdz efektīvs, ja to lieto bez klauzulas PARTITION BY, lai gan to bieži izmanto kopā ar to grupēšanai un ranžēšanai nodalījumos. ROW_NUMBER() iespējas un lietojumi bez klauzulas PARTITION BY tiks apspriesti šajā rakstā.
Sintakse:
ATLASĪT
ROW_NUMBER() BEIGAS ( SAKĀRTOT PĒC YourOrderByColumn) AS rindas numurs,
CitasSlejas
NO
Jūsu tabulas nosaukums;
Pārbaudīsim ranžēšanas sadaļu, izmantojot funkciju ROW_NUMBER() bez klauzulām PARTITION BY un ORDER BY.
SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Izvade:

Izvade
Izmantojiet ROW_NUMBER(), lai iegūtu rindu apakškopu
Funkciju ROW_NUMBER() var izmantot, lai no tabulas iegūtu rindu apakškopu, izmantojot CTE, kas var būt noderīga datu lappušu maiņas gadījumā.
Pārbaudīsim katras klases 2 labākos reitingus, izmantojot CTE (kopējā tabulas izteiksme) ar funkciju 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;>
Paskaidrojums: Šeit vaicājumā mēs esam izmantojuši CTE izteiksmi, lai iegūtu pagaidu tabulu no iepriekš izmantotā vaicājuma, un mēs esam izmantojuši ārējo SELCT vaicājumu, lai iegūtu studentus, kuru rankNumber ir mazāks vai vienāds ar 2.
Izvade:

Izvade
Paskaidrojums: Rezultātā mēs varam redzēt, ka mums ir 2 labākie ranžētāji no katras sadaļas, kas ir tabulas apakškopa, kas iegūta no iepriekšējā piemērā parādītā vaicājuma.
Priekšrocības noROW_NUMBER()>
Ar PARTITION BY
- Ļauj uzlabot nodalījumu ranžēšanu.
- Iespējo unikālu rindu numerāciju noteiktās grupās.
- Ļauj nodrošināt lielāku elastību apstākļos, kas saistīti ar plašu analīzi.
Priekšrocības noROW_NUMBER()>
Bez PARTITION BY
- Tiešs un vienkāršs.
- ļauj vienkārši sakārtot vienumus atbilstoši noteiktai kolonnai.
- Var piedāvāt labāku veiktspēju, īpaši mazākām rezultātu kopām.
Secinājums
Tas ir ļoti noderīgi, ja mēs vēlamies veikt secību, pamatojoties uz nodalījumu, un veikt nepieciešamās darbības. Izmantojot PASŪTĪT PĒC klauzulas ir obligāts, izmantojot funkciju ROW_NUMBER(). Arī izmantojot CTE, mēs varam iegūt tabulas apakškopas no pasūtītajiem nodalījumiem. Galvenais ROW_NUMBER() lietošanas gadījums ir rindu ranžēšana, pamatojoties uz dažādiem nodalījumiem, kas ir ļoti noderīgi datu analīzes nolūkiem.