row_number()over(partition by col1 order by col2) pomeni razvrstitev po col2 znotraj grupe, vrednost, izračunana s to funkcijo, predstavlja redno številko (zaporedno enoličnost znotraj skupine) po tem, ko je vsaka skupina interno razvrščena. Razlika od rowuma je v tem, da pri uporabi rowuma za sortiranje dodaš slab rowum v množico rezultatov in ga nato razvrstiš, medtem ko row_number() najprej razvrsti in nato izračuna številko vrstice po vključitvi razvrščevalne klavzule.
1. Rownum v oraklju
Za številčenje vrstic, vrnjenih iz poizvedbe, prva vrnjena vrstica dobi 1, druga vrstica 2, in tako naprej; to psevdopolje lahko omejimo skupno število vrnjenih vrstic, ki jih poizvedba vrne, rowum pa ne more biti predpona nobene tabele.
1. rownum za pogoje poizvedbe, enake določeni vrednosti
Če želite najti prvega študenta v študentski tabeli, lahko kot pogoj uporabite rownum=1. Če pa želite najti podatke o drugem študentu v tabeli študentov, podatkov ne morete najti z rowum=2. Ker rowum začne pri 1, naravna števila nad 1 pa veljajo za neresnična, ko rowum ocenjujemo kot enako da, zato je nemogoče najti rowum = n(n>1 naravnih števil).
2. Rownum za pogoje poizvedb, ki so večji od določene vrednosti
Če želite najti zapise od druge vrstice naprej, lahko pri uporabi rownum>2 ne najdete zapisov, lahko uporabite naslednje metode podpoizvedb za rešitev problema. Upoštevajte, da mora imeti rownum v podpoizvedbi vzdevek, sicer zapis ne bo najden, ker rowum ni stolpec tabele, in če vzdevka ni, ni mogoče vedeti, ali je rowum stolpec podpoizvedbe ali stolpec glavne poizvedbe.
3. Rownum za pogoje poizvedbe manjše od določene vrednosti
Če želite najti prejšnji zapis tretjega zapisa, lahko dobite dva zapisa z uporabo rownum<3. Seveda Rownum meni, da je pogoj rowuma < n (naravno število (n>1) resničen, zato lahko najdete zapis.
4. Rownum in vrstni red
Rownum v Oracleu je zaporedna številka, ki se ustvari ob pridobivanju podatkov, zato če želite določiti rowmun vrstice za določene sortirane podatke, morate biti pozorni nanj.
IME ROWNUM ID ---------- ------ --------------------------------------------------- 3 200003 Li San 2 200002 Wang Er 1 200001 Zhang Yi 4 200004 Zhao Si
Vidimo lahko, daRownum ni zaporedna številka, ki jo generira stolpec z imeni。 Sistem dodeli število vrstic zapisov v vrstnem redu, v katerem so bili vstavljeni, rowid pa je prav tako dodeljen po vrstnem redu. Za rešitev tega problema je treba uporabiti podpoizvedbe
IME ROWNUM ID ---------- ------ --------------------------------------------------- 1 200003 Li San 2 200002 Wang Er 3 200001 Zhang Yi 4 200004 Zhao Si
2. Preročišče row_number ()
1、row_number() čez (naročilo po col_1[,col_2 ...]) Po col_1[,col_2 ...] Sortiranje vrne urejeno množico rezultatov in za vsako vrstico vrne drugačno vrednost.
2、row_number() nad (delitev z col_n[,col_m ...] vrstnim redom col_1[,col_2 ...]) Prvič, po col_n[,col_m ... združevanje, in nato v vsaki skupini glede na col_1[,col_2 ...] sortiranje (naraščajoče) in na koncu vrni sortirano množico rezultatov
Primer Oracle row_number()
1. Uporabite funkcijo row_number() za številčenje, kot je
Načelo: Najprej razvrstite po PSD, po razvrščanju pa oštevilčite vsak podatek.
2. Razvrstite vrstni red po naraščajočem vrstnem redu cene in vsak zapis razvrstite z naslednjo kodo:
3. Preštejte število naročil, ki jih je v zadnjem času oddal vsak kupec.
4. Pri uporabi funkcij odpiranja oken, kot je over, je izvedba združevanja in razvrščanja v over kasnejša kot izvedba »kje, group by, order by«.
Zgornja koda najprej izvede klavzulo where, nato pa po izvedbi oštevilči vsak zapis.
3. Razlika med row_number () in rownumom
Pri razvrščanju z rownumom dodate slab rowum v množico rezultatov in ga nato razvrstite, medtem ko row_number() najprej sortira in nato izračuna številko vrstice po vključitvi razvrščevalne klavzule. |