Funkcija DENSE_RANK() leidžia priskirti unikalų reitingą kiekvienai rezultatų rinkinio eilutei, remiantis reikšmėmis dar viename nurodytame stulpelyje. Ji labai panaši į rank() funkciją, tačiau turi nedidelių skirtumų, kaip funkcija tvarko pasikartojančius įrašus.
Šioje pamokoje išnagrinėsime, kaip ši funkcija veikia, kokia yra sintaksė ir kaip galime ją naudoti duomenų bazėje.
Kaip tai veikia
Pradėkime nuo paaiškinimo, kaip ši funkcija veikia. Verta nepamiršti, kad funkcija yra aukšto lygio, todėl negalime paaiškinti jos įgyvendinimo.
Funkcija veikia priskirdama reitingą kiekvienai rezultatų rinkinio eilutei, pradedant nuo 1 rango ir didėjant 1 kiekvienai unikaliai stulpelių vertei.
Eilutės su panašiomis reikšmėmis (dublikatai) nurodytuose stulpeliuose priskiriamos tuo pačiu reitingu, o kitai eilutei su kita reikšme priskiriamas kitas turimas rangas, be jokių tarpų.
Kaip minėjome, funkcija nepalieka jokių spragų ten, kur yra pasikartojančių reikšmių, todėl ji skiriasi nuo rank() funkcijos.
Įprasta funkcija dense_rank() yra reitingavimo operacijų atlikimas. Pavyzdžiui, galime jį naudoti norėdami rasti geriausių N įrašų ir pan.
Funkcijos sintaksė:
Toliau aprašoma funkcijos dense_rank() sintaksė:
DENSE_RANK() OVER ([SKYRIUS PAGAL skaidinio_išreiškimą, ... ]
ĮSAKYMAS BY rūšiavimo_išreiškimas [ASC | DESC],...
)
Nurodytoje sintaksėje:
- Pradedame nuo pačios funkcijos dense_rank().
- OVER sąlyga rodo lango funkcijos specifikacijų pradžią. Tai apibrėžia, kaip rezultatų rinkinyje taikomas reitingas.
- PARTITION BY partition_expression yra neprivaloma sąlyga, leidžianti padalinti gautą rinkinį į grupes arba skaidinius pagal vieną ar daugiau stulpelių. Reitingas taikomas atskirai kiekvienai skaidiniams, o reitingas nustatomas iš naujo naujoje skaidinyje.
- ORDER BY sort_expression nurodo tvarką, kuria norime rūšiuoti gautų skaidinių duomenis.
Duomenų pavyzdžiai
Norėdami parodyti, kaip naudoti funkciją dense_rank(), pradėkime nuo lentelės su duomenų pavyzdžiais. Mūsų atveju naudojame pavyzdinę „užsakymų“ lentelę taip:
1 pavyzdys: Dense_Rank() funkcijos naudojimas
Galime naudoti funkciją dense_rank() norėdami reitinguoti gautus užsakymus pagal kainą. Apsvarstykite toliau pateiktą užklausos pavyzdį:
PASIRINKTIorder_id,
customer_username,
product_purchased,
DENSE_RANK() OVER (
ĮSAKYMAS BY
kaina DISKAS
) kainos_reitingas
NUO
įsakymai o;
Pateiktame pavyzdyje naudojame funkciją dense_rank() norėdami reitinguoti duomenis pagal užsakymų kainą. Praleidžiame sąlygą PARTITION BY, nes negrupuojame duomenų.
Gauta išvestis yra tokia:
2 pavyzdys: PASIDARYMAS BY
Taip pat galime pridėti sąlygą PARTITION BY, kad sugrupuotume duomenis į įvairius segmentus, pavyzdžiui, pagal įsigytą produktą.
Užklausos pavyzdys yra toks:
PASIRINKTIorder_id,
customer_username,
product_purchased,
DENSE_RANK() OVER (
skirstymas pagal produktą_pirktą
ĮSAKYMAS BY
kaina DISKAS
) kainos_reitingas
NUO
įsakymai o;
Tai turėtų sugrupuoti duomenis į įvairias grupes pagal gautas grupes ir taikyti kiekvienos grupės elementų reitingą.
Išvada
Šiame įraše sužinojome, kaip naudoti ir dirbti su lango funkcija dense_rank() SQL, kad vertėms būtų priskirtas reitingas pagal konkrečius stulpelius.