row_number()over(partition by col1 order by col2) nozīmē kārtot pēc col2 grupā, un šīs funkcijas aprēķinātā vērtība atspoguļo kārtas numuru (secīgo unikālo grupā) pēc katras grupas iekšējās kārtošanas. Atšķirība no rownum ir tāda, ka, izmantojot rownum kārtošanai, rezultātu kopai pievieno sliktu rownum un pēc tam to kārto, savukārt row_number() vispirms kārto un pēc tam aprēķina rindas numuru pēc kārtošanas klauzulas iekļaušanas.
1. Rownum orākulā
Izmanto, lai numurētu no vaicājuma atgrieztās rindas, pirmajai atgrieztajai rindai tiek piešķirts 1, otrajai rindai ir 2 utt., Šo pseidolauku var izmantot, lai ierobežotu vaicājuma atgriezto rindu kopējo skaitu, un rindas skaitlim nevar pievienot nevienas tabulas nosaukumu.
1. Rownum vaicājuma nosacījumiem, kas vienādi ar noteiktu vērtību
Ja studentu tabulā vēlaties atrast pirmo studentu, kā nosacījumu varat izmantot rownum=1. Tomēr, ja studentu tabulā vēlaties atrast informāciju par otro studentu, datus nevar atrast, izmantojot rownum=2. Tā kā rownum sākas no 1, bet naturāli skaitļi virs 1 tiek uzskatīti par nepatiesiem, ja rownum tiek uzskatīts par vienādu ar jā, tāpēc nav iespējams atrast rownum = n(n>1 naturālus skaitļus).
2. Rownum vaicājuma nosacījumiem, kas ir lielāki par noteiktu vērtību
Ja vēlaties atrast ierakstus no otrās rindas, izmantojot rownum>2 nevar atrast ierakstus, problēmas novēršanai varat izmantot šādas apakšvaicājuma metodes. Ņemiet vērā, ka apakšvaicājuma rindas numuram jābūt aizstājvārdam, pretējā gadījumā ieraksts netiks atrasts, jo rindas numurs nav tabulas kolonna, un, ja nav aizstājvārda, nav iespējams zināt, vai rindas numurs ir apakšvaicājuma kolonna vai galvenā vaicājuma kolonna.
3. Rownum vaicājuma nosacījumiem, kas ir mazāki par noteiktu vērtību
Ja vēlaties atrast trešā ieraksta iepriekšējo ierakstu, varat iegūt divus ierakstus, izmantojot rownum<3. Acīmredzot rownum uzskata, ka rownum < n (naturāls skaitlis (n>1) ir patiess, tāpēc jūs varat atrast ierakstu.
4. Rownum un secība
Oracle rindas numurs ir kārtas numurs, kas ģenerēts, izgūstot datus, tādēļ, ja vēlaties norādīt rindas datus norādītajiem sakārtotajiem datiem, jums jāpievērš uzmanība tam.
ROWNUM ID NOSAUKUMS ---------- ------ --------------------------------------------------- 3 200003 Li San 2 200002 Wang Er 1 200001 Zhang Yi 4 200004 Zhao Si
Var redzēt, kaRindas numurs nav kārtas numurs, ko ģenerē kolonna nosaukums。 Sistēma piešķir ierakstu rindas numuru tādā secībā, kādā tie tika ievietoti, un rindas id tiek piešķirts arī secībā. Lai atrisinātu šo problēmu, jāizmanto apakšvaicājumi
ROWNUM ID NOSAUKUMS ---------- ------ --------------------------------------------------- 1 200003 Li San 2 200002 Wang Er 3 200001 Zhang Yi 4 200004 Zhao Si
2. Oracle row_number ()
1、row_number() virs (pasūtījums pēc col_1[,col_2 ...]) Saskaņā ar col_1[,col_2 ...] Kārtot, atgriež sakārtoto rezultātu kopu un katrai rindai atgriež atšķirīgu vērtību.
2、row_number() virs (sadalījums ar col_n[,col_m ...] pasūtījumu ar col_1[,col_2 ...]) Pirmkārt, saskaņā ar col_n[,col_m ... grupēšana un pēc tam katrā grupēšanā atbilstoši col_1[,col_2 ...] kārtot (augošā secībā) un visbeidzot atgriezt sakārtoto rezultātu kopu
Oracle row_number() instance
1. Izmantojiet funkciju row_number(), lai numurētu, piemēram,
Princips: vispirms kārtojiet pēc PSD un pēc kārtošanas numurējiet katru datu vienību.
2. Kārtojiet secību augošā secībā pēc cenas un kārtojiet katru ierakstu ar šādu kodu:
3. Saskaitiet katra klienta pēdējā laikā veikto pasūtījumu skaitu.
4. Izmantojot logu atvēršanas funkcijas, piemēram, over, grupēšanas un šķirošanas izpilde ir vēlāka nekā "kur, grupēt pēc, pasūtīt pēc".
Iepriekš minētais kods vispirms izpilda klauzulu where un pēc tam numurē katru ierakstu pēc izpildes.
3. Atšķirība starp row_number () un rownum
Kārtojot ar rownum, rezultātu kopai pievieno neskaidru rownum un pēc tam to kārto, savukārt row_number() vispirms kārto un pēc tam aprēķina rindas numuru pēc kārtošanas klauzulas iekļaušanas. |