Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » OLAP のサポート » SQL Anywhere の Window 関数 » Window ランキング関数

 

RANK 関数

RANK 関数は、その他のローの値と比較した現在のローの値のランクを返します。値のランクは、値のリストがソートされた場合の順序を反映しています。

RANK 関数を使用すると、ウィンドウの ORDER BY 句で指定された式でランクが計算されます。ORDER BY 句に複数の式が含まれる場合は、最初の式によって隣接ローで同じ値になるときに同順の発生を避けるために、2 番目以降の式が使用されます。NULL 値はその他の値よりも前にソートされます (昇順の場合)。

例 1

次のクエリは、データベースで最もコストが高い製品 3 つを特定します。ウィンドウでは降順のソート順序が指定されるため、最もコストの高い製品はランクが最も低くなります。つまり、ランク付けは 1 から開始します。

SELECT Top 3 *
       FROM ( SELECT Description, Quantity, UnitPrice,
              RANK() OVER ( ORDER BY UnitPrice DESC ) AS Rank 
              FROM Products ) AS DT
ORDER BY Rank;

このクエリは、次の結果を返します。

Description Quantity UnitPrice Rank
1 Zipped Sweatshirt 32 24.00 1
2 Hooded Sweatshirt 39 24.00 1
3 Cotton Shorts 80 15.00 3

ロー 1 と 2 は、UnitPrice の値が同じであるため、ランクも同じになります。これを「同順」と呼びます。

RANK 関数では、同順の後はランクの値がジャンプします。たとえば、ロー 3 のランク値は 2 ではなく 3 にジャンプします。この動作は、同順の後でジャンプが発生しない DENSE_RANK 関数と異なります。DENSE_RANK 関数を参照してください。

例 2

次の SQL クエリは、ユタ州の男性および女性従業員を検索し、給与が多い順にランクします。

SELECT Surname, Salary, Sex,
     RANK() OVER ( ORDER BY Salary DESC ) "Rank"
     FROM Employees 
WHERE State IN ( 'UT' );

次のテーブルは、クエリからの結果セットを示します。

Surname Salary Sex Rank
1 Shishov 72995.00 F 1
2 Wang 68400.00 M 2
3 Cobb 62000.00 M 3
4 Morris 61300.00 M 4
5 Diaz 54900.00 M 5
6 Driscoll 48023.69 M 6
7 Hildebrand 45829.00 F 7
8 Goggin 37900.00 M 8
9 Rebeiro 34576.00 M 9
10 Bigelow 31200.00 F 10
11 Lynch 24903.00 M 11
例 3

データを分割して異なる結果になるように計算できます。例 2 のクエリを使用して、性別で分割することでデータを変更できます。次の例は、従業員を性別ごとに給与の多い順でランクしたものです。

SELECT Surname, Salary, Sex,
     RANK ( ) OVER ( PARTITION BY Sex
     ORDER BY Salary DESC ) "Rank"
     FROM Employees 
WHERE State IN ( 'UT' );

次のテーブルは、クエリからの結果セットを示します。

Surname Salary Sex Rank
1 Wang 68400.00 M 1
2 Cobb 62000.00 M 2
3 Morris 61300.00 M 3
4 Diaz 54900.00 M 4
5 Driscoll 48023.69 M 5
6 Goggin 37900.00 M 6
7 Rebeiro 34576.00 M 7
8 Lynch 24903.00 M 8
9 Shishov 72995.00 F 1
10 Hildebrand 45829.00 F 2
11 Bigelow 31200.00 F 3

RANK 関数の構文の詳細については、RANK 関数 [ランキング]を参照してください。