パーティション内の値のランクを計算します。同位の値の場合、DENSE_RANK はランキングシーケンス内にギャップを残しません。
DENSE_RANK( ) OVER ( window-spec )
window-spec :次の「備考」の項を参照してください
INTEGER
window-spec の要素は、関数構文の中 (インライン) に指定するか、または SELECT 文の WINDOW 句と組み合わせて指定できます。Window 関数として使用する場合、ORDER BY 句を指定する必要があります。また PARTITION BY 句を指定できますが、ROWS 句または RANGE 句は指定できません。詳細については、WINDOW 句の window-spec 定義を参照してください。
SQL/2008 DENSE_RANK 関数は、オプションの SQL/2008 言語機能 T612、「Advanced OLAP operations」の一部です。
SQL Anywhere では、SQL/2008 言語機能 F441、「Extended set function support」がサポートされています。これにより、カラム参照ではない任意の式を Window 関数のオペランドで使用できます。
SQL Anywhere では、オプションの SQL/2008 機能 F442、「Mixed column references in set function」がサポートされていません。SQL Anywhere では、DENSE_RANK 関数を含むクエリブロックからのカラム参照と外部参照の両方を、集合関数の引数に含めることはできません。例については、AVG 関数 [集合]を参照してください。
次の例は、ユタとニューヨークの従業員の給与ランキングを示す結果セットを返します。結果セットには 19 レコードが返されますが、リスト内の 7 番目と 8 番目の従業員は同一給与で 7 位の同順であるため、18 のランキングのみリストされています。DENSE_RANK 関数はランクにギャップを残さないため、9 番目の従業員を '9' とランキングする代わりに、その従業員は '8' とリストされます。
SELECT DepartmentID, Surname, Salary, State, DENSE_RANK() OVER (ORDER BY Salary DESC) AS SalaryRank FROM Employees WHERE State IN ('NY','UT'); |
結果セットは次のとおりです。
DepartmentID | Surname | Salary | State | SalaryRank |
---|---|---|---|---|
100 | Shishov | 72995.000 | UT | 1 |
100 | Wang | 68400.000 | UT | 2 |
100 | Cobb | 62000.000 | UT | 3 |
400 | Morris | 61300.000 | UT | 4 |
300 | Davidson | 57090.000 | NY | 5 |
200 | Martel | 55700.000 | NY | 6 |
400 | Blaikie | 54900.000 | NY | 7 |
100 | Diaz | 54900.000 | UT | 7 |
100 | Driscoll | 48023.000 | UT | 8 |
400 | Hildebrand | 45829.000 | UT | 9 |
100 | Whitney | 45700.000 | NY | 10 |
100 | Guevara | 42998.000 | NY | 11 |
100 | Soo | 39075.000 | NY | 12 |
200 | Goggin | 37900.000 | UT | 13 |
400 | Wetherby | 35745.000 | NY | 14 |
400 | Ahmed | 34992.000 | NY | 15 |
500 | Rebeiro | 34576.000 | UT | 16 |
300 | Bigelow | 31200.000 | UT | 17 |
500 | Lynch | 24903.000 | UT | 18 |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |