Funkcija DENSE_RANK() omogućuje nam dodjeljivanje jedinstvenog ranga svakom retku unutar skupa rezultata na temelju vrijednosti u još jednom određenom stupcu. Vrlo je slična funkciji rank(), ali s malim razlikama u tome kako funkcija obrađuje dvostruke zapise.
U ovom vodiču ćemo istražiti kako ova funkcija radi, danu sintaksu i kako je možemo koristiti u bazi podataka.
Kako radi
Počnimo s objašnjenjem kako ova funkcija radi. Dobro je imati na umu da je funkcija visoke razine i da ne možemo objasniti temeljnu implementaciju.
Funkcija funkcionira dodjeljivanjem ranga svakom retku u skupu rezultata počevši od ranga 1 i povećavajući se za 1 za svaku jedinstvenu vrijednost u stupcima.
Redovima sa sličnim vrijednostima (duplikatima) u navedenim stupcima dodjeljuje se isti rang, a sljedećem redu s različitom vrijednošću dodjeljuje se sljedeći dostupni rang, bez razmaka.
Kao što smo spomenuli, funkcija ne ostavlja nikakve praznine gdje postoje duplicirane vrijednosti, što je čini različitom od funkcije rank().
Uobičajena uporaba funkcije dense_rank() je izvođenje operacija rangiranja. Na primjer, možemo ga koristiti za pronalaženje prvih N zapisa, itd.
Sintaksa funkcije:
Sljedeće opisuje sintaksu funkcije dense_rank():
DENSE_RANK() PREKO ([PARTICIJA PO particionom_izrazu, ...]
NARUDŽBA BY sort_expression [ASC | DESC], ...
)
U navedenoj sintaksi:
- Počinjemo sa samom funkcijom dense_rank().
- Klauzula OVER signalizira početak specifikacije funkcije prozora. Ovo definira kako se rangiranje primjenjuje unutar skupa rezultata.
- PARTITION BY partition_expression je izborna klauzula koja nam omogućuje particioniranje rezultirajućeg skupa u grupe ili particije na temelju jednog ili više stupaca. Poredak se primjenjuje zasebno na svaku particiju s resetiranjem ranga na novoj particiji.
- ORDER BY sort_expression navodi redoslijed kojim želimo koristiti za sortiranje podataka u rezultirajućim particijama.
Uzorak podataka
Da bismo pokazali kako se koristi funkcija dense_rank(), počnimo s tablicom s oglednim podacima. U našem slučaju koristimo primjer tablice 'narudžbi' kako slijedi:
Primjer 1: Upotreba funkcije Dense_Rank().
Možemo koristiti funkciju dense_rank() za rangiranje rezultirajućih naloga na temelju cijene. Razmotrite sljedeći primjer upita:
IZABERIID_narudžbe,
korisničko_ime_kupca,
proizvod_kupljen,
DENSE_RANK() PREKO (
NARUDŽBA PO
cijena DISK
) rang_cijene
IZ
naređuje o;
U navedenom primjeru koristimo funkciju dense_rank() za rangiranje podataka na temelju cijene naloga. Izostavljamo klauzulu PARTITION BY jer ne grupiramo podatke.
Rezultirajući izlaz je sljedeći:
Primjer 2: PODJELA PO
Također možemo dodati klauzulu PARTITION BY za grupiranje podataka u različite segmente, primjerice na temelju kupljenog proizvoda.
Primjer upita je sljedeći:
IZABERIID_narudžbe,
korisničko_ime_kupca,
proizvod_kupljen,
DENSE_RANK() PREKO (
podjela prema kupljenom proizvodu
NARUDŽBA PO
cijena DISK
) rang_cijene
IZ
naređuje o;
Ovo bi trebalo grupirati podatke u različite grupe na temelju dobivenih grupa i primijeniti rang za stavke u svakoj grupi.
Zaključak
U ovom smo postu naučili osnove korištenja i rada s prozorskom funkcijom dense_rank() u SQL-u za dodjeljivanje ranga vrijednostima na temelju određenih stupaca.