Rezumat: în acest tutorial, veți afla cum să utilizați ROW_NUMBER()
pentru a atribui un număr secvențial fiecărui rând într-un set de rezultate de interogare.
SQL ROW_NUMBER () Prezentare generală a funcției
ROW_NUMBER()
este o funcție de fereastră care atribuie un număr întreg secvențial fiecare rând din setul de rezultate al interogării.
Următoarele ilustrează sintaxa funcției ROW_NUMBER()
:
În această sintaxă,
- Mai întâi, clauza
PARTITION BY
împarte setul de rezultate returnat dinFROM
clauză în partiții. ClauzaPARTITION BY
este opțională. Dacă îl omiteți, întregul set de rezultate este tratat ca o singură partiție. - Apoi, clauza
ORDER BY
sortează rândurile din fiecare partiție. DeoareceROW_NUMBER()
este o funcție sensibilă la ordine, este necesară clauzaORDER BY
. - În cele din urmă, fiecare rând din fiecare partiției i se atribuie un număr întreg secvențial numit număr de rând. Numărul rândului este resetat ori de câte ori este trecută granița partiției.
Exemple SQL ROW_NUMBER ()
Vom folosi employees
și departments
tabele din baza de date eșantion pentru demonstrație:
A) Exemplu SQL ROW_NUMBER simplu ()
Următoarea declarație găsește prenumele, prenumele și salariul tuturor angajaților. În plus, folosește funcția ROW_NUMBER()
pentru a adăuga un număr întreg secvențial la fiecare rând.
Imaginea următoare arată setul de rezultate parțiale:
B ) Utilizarea SQL ROW_NUMBER () pentru paginare
Funcția ROW_NUMBER()
poate fi utilizată pentru paginare. De exemplu, dacă doriți să afișați toți angajații pe o masă într-o aplicație pe pagini, fiecare pagină având zece înregistrări.
- Mai întâi, utilizați
ROW_NUMBER()
funcție pentru a atribui fiecărui rând un număr întreg secvențial. - În al doilea rând, filtrați rândurile după pagina solicitată. De exemplu, prima pagină are rândurile începând de la unu la 9, iar a doua pagină are rândurile începând de la 11 la 20 și așa mai departe.
Următoarea declarație returnează înregistrările a doua pagină, fiecare pagină are zece înregistrări.
Următorul arată rezultatul:
Dacă doriți să utilizați expresia de masă comună (CTE) în loc de interogare, iată interogarea:
C) Utilizarea SQL ROW_NUMBER () pentru a găsi cea de-a noua valoare pe grup
Următorul exemplu vă arată cum să găsiți angajații care au cel mai mare salariu în departamentele lor:
În subconsultare:
- În primul rând, clauza
PARTITION BY
distribuie angajații pe departamente. - În al doilea rând,
ORDER BY
clauza sortează angajatul din fiecare departament după salariu în ordinea descrescătoare. - În al treilea rând,
ROW_NUMBER()
atribuie fiecărui rând un număr întreg secvențial . Resetează numărul la schimbarea departamentului.
Următorul arată setul de rezultate al interogării:
În interogarea externă, am selectat numai rândurile angajaților care au row_num
valoarea 1.
Iată rezultatul întregii interogări:
Dacă schimbați predicatul din clauza WHERE
de la 1 la 2, 3 și așa mai departe, veți obține angajații care au al doilea salariu cel mai mare, al treilea cel mai mare salariu și așa mai departe.
În acest tutorial, ați învățat cum să utilizați funcția SQL ROW_NUMBER()
pentru a atribui o secvențială număr întreg la fiecare rând din setul de rezultate al unei interogări.
- A fost util acest tutorial?
- Da Nu