RANK 関数は、その他のローの値と比較した現在のローの値のランクを返します。値のランクは、値のリストがソートされた場合の順序を反映しています。
RANK 関数を使用すると、ウィンドウの ORDER BY 句で指定された式でランクが計算されます。ORDER BY 句に複数の式が含まれる場合は、最初の式によって隣接ローで同じ値になるときに同順の発生を避けるために、2 番目以降の式が使用されます。NULL 値はその他の値よりも前にソートされます (昇順の場合)。
次のクエリは、データベースで最もコストが高い製品 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 関数を参照してください。
次の 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 |
データを分割して異なる結果になるように計算できます。例 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 関数 [ランキング]を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |