SQLShack (Română)

Vom efectua calculele pe date folosind diverse funcții agregate, cum ar fi Max, Min, și AVG. Obținem un singur rând de ieșire folosind aceste funcții. SQL Sever oferă funcții SQL RANK pentru a specifica rang pentru câmpuri individuale ca pe categorizările. Returnează o valoare agregată pentru fiecare rând participant. Funcțiile SQL RANK, de asemenea, știe ca funcții fereastră.

  • notă: termenul Windows nu se referă la sistemul de operare Microsoft Windows., Acestea sunt funcții de rang SQL.

avem următoarele funcții de rang.

  • ROW_NUMĂR()
  • RANG (a)
  • DENSE_RANK()
  • NTILE()

În SQL RANG funcții, vom folosi PESTE() clauza de a defini un set de rânduri în setul de rezultate. De asemenea, putem folosi partiția SQL după clauză pentru a defini un subset de date într-o partiție. De asemenea, puteți utiliza comanda după clauză pentru a sorta rezultatele într-o ordine descrescătoare sau ascendentă.

înainte de a explora aceste funcții SQL RANK, să pregătim date eșantion., În aceste date de probă, avem rezultate ale examenelor pentru trei studenți la matematică, știință și engleză.

avem următoarele date de probă în tabelul ExamResult.

să folosim fiecare funcții SQL Rank în exemple viitoare.

ROW_Number() SQL RANK function

folosim ROW_Number () SQL RANK function pentru a obține un număr secvențial unic pentru fiecare rând din datele specificate. Dă rangul unu pentru primul rând și apoi crește valoarea cu unul pentru fiecare rând. Obținem ranguri diferite pentru rândul care are valori similare, de asemenea.,

executați următoarea interogare pentru a obține un rang pentru studenți conform mărcilor lor.,

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;

By default, it sorts the data in ascending order and starts assigning ranks for each row., În imaginea de mai sus, obținem numărul rândului 1 pentru mărcile 50.

putem specifica ordinea descrescătoare cu clauza ordine după, și modifică rangul în consecință.,ae”>

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;

RANK() SQL RANK Function

We use RANK() SQL Rank function to specify rank for each row in the result set., Avem rezultatele elevilor pentru trei materii. Vrem să clasificăm rezultatul studenților în funcție de notele lor la subiecți. De exemplu, în următoarea captură de ecran, studentul Isabella a obținut cele mai mari note la subiectul englez și cele mai mici note la subiectul matematic. Ca pe mărcile, Isabella devine primul rang în limba engleză și locul 3 în matematică subiect.

executați următoarea interogare pentru a obține acest set de rezultate.,v id=”c5a1f1b829″>

1
2
3
4
5
6
7

SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;

Let’s execute the following query of SQL Rank function and look at the result set., În această interogare, nu am specificat partiția SQL prin clauză pentru a împărți datele într-un subset mai mic. Folosim funcția SQL Rank cu clauza over pe clauza Marks (în ordine descrescătoare) pentru a obține ranguri pentru rândurile respective.,div id=”7d9d5b54ae”>

1
2
3
4
5
6

SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;

In the output, we can see each student get rank as per their marks irrespective of the specific subject., De exemplu, cele mai mari și cele mai mici note din setul complet de rezultate sunt 90, respectiv 50. În setul de rezultate, cea mai mare notă devine locul 1, iar cea mai mică notă devine locul 9.dacă doi studenți obțin aceleași note (în exemplul nostru, numerele de rând 4 și 5), rândurile lor sunt, de asemenea, aceleași.

DENSE_RANK() SQL funcția RANG

Vom folosi DENSE_RANK() funcție pentru a specifica un unic rang număr în partiția ca pe coloana specificată valoarea. Este similar cu funcția de rang cu o mică diferență.,

în funcția SQL RANK DENSE_RANK (), dacă avem valori duplicate, SQL atribuie rânduri diferite și acelor rânduri. În mod ideal, ar trebui să obținem același rang pentru valori duplicate sau similare.

să executăm următoarea interogare cu funcția DENSE_RANK ().,

1
2
3
4
5
6

SELECTAȚI Studentname,
Subiect
Semne
DENSE_RANK() OVER(ORDER BY Marchează DESC) Rang
DE la ExamResult
ORDINE DE Rang;

la ieșire, puteți vedea că avem același rang, atât pentru Lily și Isabella care a marcat 70 de mărci.,

Să folosim DENSE_RANK funcție în combinație cu SQL PARTIȚIE DE clauza.,v id=”2d0aafc924″>

1
2
3
4
5
6
7

SELECTAȚI Studentname,
Subiect
Mărci,
DENSE_RANK() OVER(PARTITION BY Pot COMANDA PRIN Semne DESC) Rang
DE la ExamResult
COMANDA DE Studentname,
Rang;

nu Avem doi elevi cu mărci similare; prin urmare, setul de rezultate similare pentru Funcția RANG în acest caz.,

să actualizăm marcajul studentului cu următoarea interogare și să reluăm interogarea.

1
Update Examresult set de Mărci=70 unde Studentname=’Isabella și Subiect=’Matematică’

putem vedea că, în grupul de student, Isabella a primit mărci similare în Matematică și Științe., Rangul este, de asemenea, același pentru ambii subiecți în acest caz.

Să vedem diferența dintre RANGUL() și DENSE_RANK() SQL funcția Rang cu următoarea interogare.,b829″>

1
2
3
4
5
6
7

SELECTAȚI Studentname,
Subiect
Semne
DENSE_RANK() OVER(PARTITION BY StudentName COMANDA PRIN Semne ) Rang
DE la ExamResult
COMANDA DE Studentname,
Rang;

la ieșire, puteți vedea diferența în gradul funcția de ieșire în partiții., Nu avem niciun decalaj în funcția DENSE_RANK.

în următoarea captură de ecran, puteți vedea că Isabella are numere similare în cele două subiecte. O funcție de rang atribuie locul 1 Pentru valori similare cu toate acestea, ignoră intern locul doi, iar rândul următor devine locul trei.

în funcția Dense_Rank, menține rangul și nu oferă niciun decalaj pentru valori.

NTILE(N) SQL funcția RANG

Vom folosi NTILE(N) funcția de a distribui numărul de rânduri în specificată (N) numărul de grupuri., Fiecare grup rând devine rangul său ca pe condiția specificată. Trebuie să specificăm valoarea pentru numărul dorit de grupuri.

în exemplul meu, avem nouă înregistrări în tabelul ExamResult. NTILE (2) arată că avem nevoie de un grup de două înregistrări în rezultat.,

1
2
3
4
5

SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

In the output, we can see two groups. Group 1 contains five rows, and Group 2 contains four rows.,

în mod Similar, NTILE(3) se împarte numărul de rânduri de trei grupuri având trei înregistrări în fiecare grup.,

1
2
3
4
5

SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

We can use SQL PARTITION BY clause to have more than one partition., În următoarea interogare, fiecare partiție pe subiecți este împărțită în două grupuri.,

1
2
3
4

SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;

Practical usage of SQL RANK functions

We can use SQL RANK function to fetch specific rows from the data., Să presupunem că vrem să obținem datele studenților de la 1 la 3. În următoarea interogare, folosim expresii comune de masă (CTE) pentru a obține date folosind funcția ROW_NUMBER () și mai târziu filtrat rezultatul de la CTE pentru a satisface starea noastră.,d>

CU StudentRanks CA
(
SELECT *, ROW_NUMĂR() OVER( ORDER BY Desene) CA Rândurile
DE la ExamResult
)
SELECTAȚI StudentName , Semne
DE la StudentRanks
în cazul în CARE Rândurile >= 1 și Rândurile <=3
COMANDA PRIN Rândurile

putem folosi OFFSET ADUCE comanda incepand de la SQL Server 2012 pentru a aduce un anumit număr de înregistrări.,v id=”0fa57edc44″>

CU StudentRanks CA
(
SELECT *, ROW_NUMĂR() OVER( ORDER BY Desene) CA Rândurile
DE la ExamResult
)
SELECTAȚI StudentName , Semne
DE la StudentRanks
COMANDA PRIN Rândurile OFFSET 1 RÂNDURI ADUCE URMĂTOARELE 3 RÂNDURI NUMAI;

Un rezumat rapid de SQL RANG Funcții

Row_număr

Se atribuie secvential rang număr unic pentru fiecare înregistrare.,

RANK

acesta atribuie numărul de rang pentru fiecare rând într-o partiție. Se omite numărul pentru valori similare.

Dense_RANK

atribuie numărul de rang fiecărui rând dintr-o partiție. Nu omite numărul pentru valori similare.

NTILE(N)

împarte numărul de rânduri conform partiției specificate și atribuie o valoare unică în partiție.,

concluzie

În acest articol, am explorat funcțiile SQL RANK și diferența dintre aceste funcții. Este util ca dezvoltatorii sql să fie familiarizați cu aceste funcții pentru a explora și gestiona bine datele lor. Dacă aveți comentarii sau întrebări, nu ezitați să le lăsați în comentariile de mai jos.,

  • Autor
  • Mesajele Recente
Ca un MCSA certificate și Microsoft Certified Trainer în Gurgaon, India, cu 13 ani de experiență, Rajendra lucrează pentru o varietate de companii mari, concentrându-se pe optimizarea performanței, de monitorizare, de înaltă disponibilitate și recuperare în caz de dezastru și strategiile de punere în aplicare., Este autorul a sute de articole autoritare despre SQL Server, Azure, MySQL, Linux, Power BI, Tuning de performanță, AWS/Amazon RDS, Git și tehnologii conexe care au fost vizualizate de cititorii 10m până în prezent.
el este creatorul uneia dintre cele mai mari colecții online gratuite de articole pe un singur subiect, cu seria sa de 50 de părți pe SQL Server întotdeauna pe grupuri de disponibilitate. Pe baza contribuției sale la comunitatea SQL Server, el a fost recunoscut cu diverse premii, inclusiv prestigiosul „cel mai bun autor al anului” continuu în 2020 și 2021 la sqlshack.,
Raj este întotdeauna interesat de noi provocări, așa că dacă aveți nevoie de ajutor de consultanță cu privire la orice subiect acoperit în scrierile sale, el poate fi contactat la rajendra.gupta16 @ gmail.,com
Vezi toate posturile de Rajendra Gupta

Ultimele posturi de Rajendra Gupta (vezi toate)
  • Efectuarea minore și majore versiune upgrade-uri pentru AWS RDS SQL Server – ianuarie 29, 2021
  • Implementarea AWS RDS PostgreSQL cazuri – 27 ianuarie 2021
  • Migrarea la sediul baze de date SQL pentru AWS RDS SQL Server folosind AWS DMS – 25 ianuarie 2021

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *