Funkcija DENSE_RANK() ļauj mums katrai rezultātu kopas rindai piešķirt unikālu rangu, pamatojoties uz vērtībām vēl vienā noteiktā kolonnā. Tā ir ļoti līdzīga funkcijai rank(), taču ar nelielām atšķirībām tajā, kā funkcija apstrādā ierakstu dublikātus.
Šajā apmācībā mēs izpētīsim, kā šī funkcija darbojas, nodrošināto sintaksi un kā mēs varam to izmantot datu bāzē.
Kā tas strādā
Sāksim, paskaidrojot, kā šī funkcija darbojas. Ir labi paturēt prātā, ka funkcija ir augsta līmeņa, un mēs nevaram izskaidrot pamatā esošo ieviešanu.
Funkcija darbojas, piešķirot rangu katrai rezultātu kopas rindai, sākot no 1. ranga un palielinot par 1 katrai unikālajai vērtībai kolonnās.
Rindām ar līdzīgām vērtībām (dublikātiem) norādītajās kolonnās tiek piešķirts vienāds rangs, un nākamajai rindai ar atšķirīgu vērtību tiek piešķirts nākamais pieejamais rangs bez atstarpēm.
Kā jau minējām, funkcija neatstāj atstarpes vietās, kur ir dublētas vērtības, kas to padara atšķirīgu no funkcijas rank ().
Bieži tiek izmantota funkcija dense_rank() ranžēšanas operāciju veikšana. Piemēram, mēs varam to izmantot, lai atrastu labākos N ierakstus utt.
Funkciju sintakse:
Tālāk ir aprakstīta funkcijas dense_rank() sintakse:
DENSE_RANK() OVER ([PARTITION BY partition_expression, ... ]
PASŪTĪT PĒC kārtošanas_izteiksmes [ASC | DESC],...
)
Dotajā sintaksē:
- Mēs sākam ar pašu funkciju dense_rank().
- OVER klauzula norāda uz loga funkciju specifikāciju sākumu. Tas nosaka, kā ranžēšana tiek piemērota rezultātu kopā.
- PARTITION BY partition_expression ir izvēles klauzula, kas ļauj sadalīt iegūto kopu grupās vai nodalījumos, pamatojoties uz vienu vai vairākām kolonnām. Reitings tiek piemērots katram nodalījumam atsevišķi, un rangs tiek atiestatīts jaunā nodalījumā.
- ORDER BY sort_expression norāda secību, kādā mēs vēlamies izmantot datu kārtošanai iegūtajos nodalījumos.
Datu paraugi
Lai parādītu, kā izmantot funkciju dense_rank(), sāksim ar tabulu ar datu paraugu. Mūsu gadījumā mēs izmantojam “pasūtījumu” tabulas paraugu šādi:
1. piemērs: Funkcijas Dense_Rank() lietojums
Mēs varam izmantot funkciju dense_rank(), lai sakārtotu iegūtos pasūtījumus, pamatojoties uz cenu. Apsveriet šādu vaicājuma piemēru:
ATLASĪTorder_id,
customer_username,
product_purchased,
DENSE_RANK() OVER (
PASŪTĪT BY
cena DISK
) cenas_rangs
NO
pasūtījumi o;
Dotajā piemērā mēs izmantojam funkciju dense_rank(), lai ranžētu datus, pamatojoties uz pasūtījumu cenām. Mēs izlaižam klauzulu PARTITION BY, jo mēs negrupējam datus.
Rezultātā iegūtais rezultāts ir šāds:
2. piemērs: NODAĻA
Mēs varam arī pievienot klauzulu PARTITION BY, lai grupētu datus dažādos segmentos, piemēram, pamatojoties uz iegādāto produktu.
Vaicājuma piemērs ir šāds:
ATLASĪTorder_id,
customer_username,
product_purchased,
DENSE_RANK() OVER (
nodalījums pēc produkta_pirkuma
PASŪTĪT BY
cena DISK
) cenas_rangs
NO
pasūtījumi o;
Tam ir jāsagrupē dati dažādās grupās, pamatojoties uz iegūtajām grupām, un jāpiemēro katras grupas vienumu rangs.
Secinājums
Šajā ziņojumā mēs uzzinājām pamatprincipus, kā izmantot un strādāt ar loga funkciju dense_rank() SQL, lai vērtībām piešķirtu rangu, pamatojoties uz konkrētām kolonnām.