DENSE_RANK

Aggregaatti Syntaksi

dense_rank_aggregate::=

Description of dense_rank_aggregate.gif seuraa

Kuvauksen dense_rank_aggregate.gif kuvaus

Analyyttinen syntaksi

dense_rank_analytic::=

Kuvaus dense_rank_analytic.gif seuraa

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 aggregaatin order_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 riveihin order_by_clause:n value_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