DENSE_RANK
Aggregat Syntaks
dense_rank_aggregate::=
Beskrivelse af illustrationen dense_rank_aggregate.gif
Analytisk Syntaks
dense_rank_analytic::=
Beskrivelse af illustrationen dense_rank_analytic.gif
Se også:
“Analytiske funktioner” for oplysninger om syntaks, semantik og begrænsninger
Formål
DENSE_RANK
beregner rangen af en række i en ordnet gruppe af rækker og returnerer rangen som en NUMBER
. Rangerne er fortløbende hele tal, der begynder med 1. Den største rangværdi er antallet af unikke værdier, der returneres af forespørgslen. Rangværdierne springes ikke over i tilfælde af uafgjorthed. Rækker med samme værdier for rangordenskriterierne får den samme rang. Denne funktion er nyttig til top-N- og bund-N-rapportering.
Denne funktion accepterer som argumenter enhver numerisk datatype og returnerer NUMBER
.
-
Som en aggregeret funktion beregner
DENSE_RANK
den tætte rang for en hypotetisk række, der identificeres af funktionens argumenter, med hensyn til en given sorteringsspecifikation. Funktionens argumenter skal alle evalueres til konstante udtryk inden for hver aggregeret gruppe, fordi de identificerer en enkelt række inden for hver gruppe. De konstante argumentudtryk og udtrykkene iorder_by_clause
i aggregatet passer sammen efter position. Derfor skal antallet af argumenter være det samme, og typerne skal være kompatible. -
Som en analytisk funktion beregner
DENSE_RANK
rangen af hver række, der returneres fra en forespørgsel, i forhold til de andre rækker, baseret på værdierne afvalue_exprs
iorder_by_clause
.
Aggregeret eksempel
Det følgende eksempel beregner rangfølgen for en hypotetisk medarbejder med lønnen 15.500 dollars og en provision på 5 % i prøvetabellen oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Analytisk eksempel
Den følgende anvisning vælger afdelingsnavn, medarbejdernavn og løn for alle medarbejdere, der arbejder i personale- eller indkøbsafdelingen, og beregner derefter en rangfølge for hver unik løn i hver af de to afdelinger. De lønninger, der er ens, får den samme rang. Sammenlign dette eksempel med eksemplet for RANK.
SELECT d.department_name, e.last_name, e.salary, DENSE_RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary) AS drank FROM employees e, departments d WHERE e.department_id = d.department_id AND d.department_id IN ('30', '40');DEPARTMENT_NAME LAST_NAME SALARY DRANK----------------------- ------------------ ---------- ----------Purchasing Colmenares 2500 1Purchasing Himuro 2600 2Purchasing Tobias 2800 3Purchasing Baida 2900 4Purchasing Khoo 3100 5Purchasing Raphaely 11000 6Human Resources Marvis 6500
Leave a Reply