DENSE_RANK

Aggregat Syntaks

dense_rank_aggregate::=

Beskrivelse af dense_rank_aggregate.gif følger

Beskrivelse af illustrationen dense_rank_aggregate.gif

Analytisk Syntaks

dense_rank_analytic::=

Beskrivelse af dense_rank_analytic.gif følger

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 i order_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 af value_exprs i order_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