Emulând funcția row_number () în mysql, mysql

În acest articol vă voi spune cum să numerotați rândurile rezultate ale interogării returnate de MySQL.

Funcția row_number () este o funcție de clasificare care returnează numărul ordinal al unui șir, începând cu 1 pentru primul rând. Numărul de linii este adesea necesar atunci când se generează rapoarte. Această funcție este implementată în MS SQL și în Oracle. În MySQL, nu există o astfel de funcție, dar este ușor de implementat în detrimentul variabilelor globale.







Rânduri de numerotare

Pentru a enumera rândurile, trebuie să declarăm o variabilă de interogare. Să demonstrăm această abordare cu exemplul unui tabel simplu care conține o listă de angajați. Următoarea interogare selectează 5 angajați din tabel, atribuindu-le numere în ordine, începând cu 1:

Emulând funcția row_number () în mysql, mysql

În interogarea de mai sus, noi:

  • Definiți variabila număr_număr și inițializați-o cu o valoare zero;
  • A crescut valoarea sa cu 1 la fiecare iterație a interogării.






O altă tehnică care permite obținerea aceluiași rezultat este de a crea o tabelă derivată în loc de o variabilă globală și de a se alătura acestor două tabele. Un exemplu de astfel de interogare:

Rețineți că pentru a respecta regulile de sintaxă, vizualizarea trebuie să aibă un alias.

Reluarea numerotării în grupuri

Cum specificăm o numerotare separată pentru fiecare grup de rânduri care sunt unite printr-o clauză ORDER BY sau GROUP BY. De exemplu, cum se simulează următoarea interogare:

Emulând funcția row_number () în mysql, mysql

Trebuie să creați o listă de plăți, în care fiecare plată va corespunde unui anumit număr de serie. Pentru a obține rezultatul dorit, avem nevoie de două variabile: una - cu numărul liniei de comandă, celălalt - pentru a stoca ID-ul client de la linia anterioară, să-l compare cu curent. Solicitarea noastră va arăta astfel:

Am folosit instrucțiunea CASE pentru a calcula condiția: dacă numărul clientului rămâne același, vom crește numărul liniei cu 1, altfel am setat numărul de linie la 1. Rezultatul va fi același ca în captura de ecran de mai sus.

Acum vom obține același rezultat utilizând tehnica tabelului derivat și cererea încrucișată:

Deci, am învățat cum să emulați numerotarea șirurilor de interogări în MySQL.

Traducerea articolului "MySQL row_number Emulation" a fost pregătită de echipa prietenoasă a proiectului Saitostroenie de la A la Z.







Trimiteți-le prietenilor: