DENSE_RANK
Aggregaatti Syntaksi
dense_rank_aggregate::=
Kuvauksen dense_rank_aggregate.gif kuvaus
Analyyttinen syntaksi
dense_rank_analytic::=
Kuvaus kuviosta dense_rank_analytic.gif
Katso myös:
”Analyyttiset funktiot” saadaksesi tietoa syntaksista, semantiikasta ja rajoituksista
Tarkoitus
DENSE_RANK
laskee rivin sijan järjestetystä riviryhmästä ja palauttaa sijan NUMBER
:nä. Rankit ovat peräkkäisiä kokonaislukuja, jotka alkavat luvulla 1. Suurin rank-arvo on kyselyn palauttamien uniikkien arvojen määrä. Sijoitusarvoja ei ohiteta tasapisteissä. Rivit, joilla on samat arvot järjestyskriteereissä, saavat saman järjestyksen. Tämä funktio on hyödyllinen top-N- ja bottom-N-raportoinnissa.
Tämä funktio hyväksyy argumentteina minkä tahansa numeerisen tietotyypin ja palauttaa NUMBER
.
-
Yhteenvetofunktiona
DENSE_RANK
laskee funktion argumenteilla yksilöidyn hypoteettisen rivin tiheän sijan tietyn lajittelumäärittelyn suhteen. Kaikkien funktion argumenttien on evaluoitava vakiolausekkeiksi kussakin aggregaattiryhmässä, koska ne tunnistavat yhden rivin kussakin ryhmässä. Vakioargumenttien lausekkeet ja aggregaatinorder_by_clause
lausekkeet täsmäävät sijainnin mukaan. Siksi argumenttien lukumäärän on oltava sama ja tyyppien on oltava yhteensopivia. -
Analyyttisenä funktiona
DENSE_RANK
laskee jokaisen kyselystä palautetun rivin sijoituksen suhteessa muihin riveihinorder_by_clause
:nvalue_exprs
arvojen perusteella.
Aggregoitu esimerkki
Seuraavassa esimerkissä lasketaan hypoteettisen työntekijän, jonka palkka on 15 500 dollaria ja provisio 5 %, arvojärjestys esimerkkitaulukossa oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Analyyttinen esimerkki
Seuraavassa lausekkeessa valitaan kaikkien henkilöstöhallinto- tai osto-osastolla työskentelevien työntekijöiden osaston nimi, työntekijän nimi ja palkka ja lasketaan sen jälkeen arvojärjestys kullekin yksilölliselle palkkalle kullakin kahdesta osaston palkkalajille. Samansuuruiset palkat saavat saman sijan. Vertaa tätä esimerkkiä esimerkkiin 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