logo

Funkcia SQL Server Row_Number s PARTITION BY

Funkcia čísla riadku je jednou z funkcií okna, ktorá sa používa na priradenie čísla riadku k riadkom v každej z oblastí v poradí, v akom boli zoradené v oblasti pomocou PARTIE klauzula, ROZDIEL len ten OBJEDNAŤ klauzulu možno použiť vo vnútri klauzuly OVER, v takom prípade sa celá tabuľka bude považovať za jeden oddiel. Ale klauzula ORDER BY je povinná pre použitie ROW_NUMBER() pretože usporiada riadky v oddieloch v tomto logickom poradí a neskôr funkcia ROW_NUMBER() môže priradiť číslo riadku. V každej partícii začína číslo riadku od 1.

Syntax:



ROW_NUMBER ( )

NAD ( [ PARTITION BY stĺpec_1, stĺpec_2… ] ORDER BY stĺpec_3, stĺpec_4.. ASC alebo DESC) AS názov_stĺpca

Komponenty funkcie ROW_NUMBER().



  • ROZDELENIE PODĽA: Toto je hlavná podkapitola, ktorá rozdeľuje riadky do okien a pre každý riadok hodnoty funkcie okien budú vypočítané.
  • ZORADIŤ PODĽA: Používa sa na zoradenie riadkov v oddiele, štandardne je to vzostupné poradie. Bez klauzuly ORDER BY funkcia ROW_NUMBER() nefunguje.
  • Typ návratu: Návratový typ funkcie ROW_NUMBER() je BIGINT.

Použitie funkcie ROW_NUMBER().

Krok 1: Vytvorte databázu Geeksforgeeks pomocou nasledujúceho SQL dotazu:

Dopyt

CREATE DATABASE Geeksforgeeks>

Použite databázu GFG.



Dopyt

USE techcodeview.com>

Krok 3: Vytvorte tabuľku so študentmi rôznych sekcií s ich celkovým počtom bodov z 500.

Dopyt

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

Krok 4: Do tabuľky vložte riadky:

Dopyt

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

Krok 5: Skontrolujte tabuľku

SELECT * FROM studentsSectionWise>

Výkon:

študentiSectionWise-Tabuľka

študentiSectionWise tabuľka

rok bol vynájdený počítač

Použitie klauzuly ORDER_BY s funkciou ROW_NUMBER().

Jednoduché použitie klauzuly ORDER BY so vzostupným alebo zostupným spôsobom považuje celú tabuľku len za jeden oddiel.

Skontrolujeme poradové číslo študentov pomocou funkcie ROW_NUMBER() s klauzulou ORDER BY vrátane všetkých sekcií:

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

Vysvetlenie: V dotaze sme použili klauzulu ORDER BY so značkami študentov, ktorá je zoradená v poradí DESC.

Výkon:

výkon

Výkon

Vysvetlenie: Vo výsledku vidíme, že celá tabuľka sa považuje za jeden oddiel a číslo poradia je v rastúcom poradí so známkami študentov v zostupnom poradí.

Použitie PARTITION_BY s funkciou ROW_NUMBER().

Jednoduché použitie klauzuly PARTITION BY rozdelí tabuľku do rôznych oblastí na základe názvu stĺpca a potom klauzulu ORDER BY so vzostupnou alebo zostupnou hodnotou považuje celú tabuľku len za jednu oblasť. A potom ROW_NUMBER() funguje pre každé jedinečné číslo začínajúce od 1 v každom oddiele.

Skontrolujme sekciu hodnotenia pomocou funkcie ROW_NUMBER() s klauzulami PARTITION BY a ORDER BY.

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

Vysvetlenie: V dopyte, ktorý sme použili PARTTION BY na rozdelenie tabuľky v časti Názov sekcie a klauzule ORDER BY so značkami študentov, ktoré sú usporiadané v DESC.

Výkon:

výkon

Výkon

Vysvetlenie: Vo výsledku vidíme, že máme oddiely rozdelené podľa názvu sekcie a potom v každej sekcii sú študenti zoradení na základe známok študentov v poradí DESC , funkcii ROW_NUMBER() je priradené číslo riadku začínajúce od v každej sekcii, pričom sa zvyšuje .

Pochopenie ROW_NUMBER() bez PARTITION BY

Funkcia ROW_NUMBER() SQL Servera je flexibilný nástroj, ktorý vám umožňuje poskytnúť každému riadku v sade výsledkov jedinečné číslo riadku. Je rovnako účinný, keď sa používa bez klauzuly PARTITION BY, aj keď sa často používa v spojení s ňou na zoskupovanie a klasifikáciu v rámci oddielov. O možnostiach a použití ROW_NUMBER() bez klauzuly PARTITION BY sa bude diskutovať v tomto článku.

Syntax:

SELECT

KONIEC ROW_NUMBER() ( ZORADIŤ PODĽA YourOrderByColumn) AS RowNum,

OstatnéStĺpce

OD

YourTableName;

Skontrolujme sekciu hodnotenia pomocou funkcie ROW_NUMBER() bez klauzúl PARTITION BY a ORDER BY.

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

Výkon:

výkon

Výkon

Pomocou ROW_NUMBER() získate podmnožinu riadkov

Funkciu ROW_NUMBER() možno použiť na získanie podmnožiny riadkov z tabuľky pomocou CTE, čo môže byť užitočné v prípade stránkovania údajov.

Pozrime sa na 2 najlepších hodnotiacich z každej triedy pomocou CTE (Common Table Expression) s funkciou 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;>

Vysvetlenie: Tu v dotaze sme použili výraz CTE na získanie dočasnej tabuľky z dotazu použitého vyššie a vonkajší dotaz SELCT sme použili na získanie študentov, ktorých rankNumber je menšie alebo rovné 2.

Výkon:

výkon

Výkon

Vysvetlenie: Vo výsledku vidíme, že máme 2 najlepších hodnotiacich z každej sekcie, ktoré sú podmnožinou tabuľky získanej z dotazu uvedeného v predchádzajúcom príklade.

VýhodyROW_NUMBER()>S PARTTION BY

  1. Umožňuje pokročilé hodnotenie oddielov.
  2. Umožňuje jedinečné číslovanie riadkov v rámci špecifických skupín.
  3. Umožňuje väčšiu flexibilitu za okolností vyžadujúcich rozsiahlu analýzu.

VýhodyROW_NUMBER()>Bez PARTTION BY

  1. Priamočiare a jednoduché.
  2. zjednodušuje zoraďovanie položiek podľa konkrétneho stĺpca.
  3. Môže ponúknuť lepší výkon, najmä pre menšie sady výsledkov.

Záver

Je to veľmi užitočné, keď chceme mať sekvenovanie na základe rozdelenia a urobiť potrebné operácie. Použitím ORDER BY doložkou je povinná pri používaní funkcie ROW_NUMBER(). Tiež pomocou CTE môžeme získať podmnožiny tabuľky z objednaných partícií. Hlavným prípadom použitia ROW_NUMBER() je klasifikácia riadkov na základe rôznych oddielov, čo je veľmi užitočné na účely analýzy údajov.