row_number()over(partition by col1 order by col2) reiškia rūšiuoti pagal col2 grupėje, o šios funkcijos apskaičiuota vertė reiškia eilės numerį (iš eilės unikalų grupėje) po to, kai kiekviena grupė yra surūšiuota viduje. Skirtumas nuo rownum yra tas, kad naudojant rownum rūšiavimui, į rezultatų rinkinį pridedate prastą rownum ir tada jį rūšiuojate, o row_number() pirmiausia rūšiuoja, o tada apskaičiuoja eilutės numerį, įtraukę rūšiavimo sąlygą.
1. Rownum orakule
Naudojamas iš užklausos grąžintoms eilutėms numeruoti, pirmajai grąžintai eilutei priskiriamas 1, antrai eilutei - 2 ir t. t., šis pseudolaukas gali būti naudojamas bendram užklausos grąžintų eilučių skaičiui apriboti, o eilutės numeris negali būti priešdėlis jokios lentelės pavadinimu.
1. Užklausos sąlygų, lygių tam tikrai reikšmei, eilutės numeris
Jei norite rasti pirmąjį mokinį studentų lentelėje, galite naudoti rownum=1 kaip sąlygą. Tačiau, jei norite rasti antrojo mokinio informaciją studentų lentelėje, negalite rasti duomenų naudodami rownum=2. Kadangi eilutė prasideda nuo 1, tačiau natūralieji skaičiai virš 1 laikomi klaidingais, kai eilutė laikoma lygia taip, todėl neįmanoma rasti eilutės = n(n>1 natūraliųjų skaičių).
2. Užklausos sąlygų, didesnių už tam tikrą reikšmę, eilutės numeris
Jei norite rasti įrašus nuo antros eilutės, kai naudojate rownum>2 negalite rasti įrašų, galite naudoti šiuos antrinės užklausos metodus, kad išspręstumėte problemą. Atkreipkite dėmesį, kad antrinės užklausos eilutės numeris turi turėti slapyvardį, kitaip įrašas nebus rastas, nes eilutės numeris nėra lentelės stulpelis, o jei nėra slapyvardžio, neįmanoma žinoti, ar eilutės numeris yra antrinės užklausos stulpelis, ar pagrindinės užklausos stulpelis.
3. Užklausos sąlygų, mažesnių už tam tikrą reikšmę, eilutės numeris
Jei norite rasti ankstesnį trečiojo įrašo įrašą, naudodami rownum<3 galite gauti du įrašus. Akivaizdu, kad rownum < n (natūralus skaičius (n>1) yra teisinga, todėl galite rasti įrašą.
4. Rownum ir tvarka
"Oracle" eilutės numeris yra eilės numeris, sugeneruotas gaunant duomenis, todėl, jei norite nurodyti nurodytų rūšiuotų duomenų eilutės duomenis, turite į tai atkreipti dėmesį.
EILUTĖS ID PAVADINIMAS ---------- ------ --------------------------------------------------- 3 200003 Li San 2 200002 Wang Er 1 200001 Zhang Yi 4 200004 Zhao Si
Galima pastebėti, kadEilutės numeris nėra eilės numeris, kurį sugeneruoja pavadinimo stulpelis。 Sistema priskiria įrašų eilutės numerį tokia tvarka, kokia jie buvo įterpti, o eilutės ID taip pat priskiriamas eilės tvarka. Norint išspręsti šią problemą, reikia naudoti antrines užklausas
EILUTĖS ID PAVADINIMAS ---------- ------ --------------------------------------------------- 1 200003 Li San 2 200002 Wang Er 3 200001 Zhang Yi 4 200004 Zhao Si
2. Orakulas row_number ()
1、row_number() virš (užsakymas pagal col_1[,col_2 ...]) Pagal col_1[,col_2 ...] Rūšiuoti, pateikia surūšiuotą rezultatų rinkinį ir pateikia skirtingą kiekvienos eilutės reikšmę.
2、row_number() virš (padalijimas pagal col_n[,col_m ...] užsakymą pagal col_1[,col_2 ...]) Pirma, pagal col_n[,col_m ... grupavimas, o po to kiekvienoje grupėje pagal col_1[,col_2 ...] rūšiuoti (didėjančia) ir galiausiai grąžinti surūšiuotą rezultatų rinkinį
Oracle row_number() egzempliorius
1. Naudokite funkciją row_number() numeruoti, pvz.,
Principas: Pirmiausia rūšiuokite pagal PSD, o po rūšiavimo sunumeruokite kiekvieną duomenų vienetą.
2. Rūšiuokite užsakymą didėjančia kainos tvarka ir kiekvieną įrašą rūšiuokite pagal šį kodą:
3. Suskaičiuokite kiekvieno kliento neseniai pateiktų užsakymų skaičių.
4. Naudojant langų atidarymo funkcijas, tokias kaip over, grupavimas ir rūšiavimas vykdomas vėliau nei "where, group by, order by".
Aukščiau pateiktas kodas pirmiausia vykdo sąlygą where, o po vykdymo sunumeruoja kiekvieną įrašą.
3. Skirtumas tarp row_number () ir rownum
Rūšiuodami su rownum, į rezultatų rinkinį pridedate nekokybišką rownum ir tada jį rūšiuojate, o row_number() pirmiausia rūšiuoja, o tada apskaičiuoja eilutės numerį, įtraukę rūšiavimo sąlygą. |