Sybase IQ 12.7 User Manual

Page of 212
 4 章    OLAP の使用
パフォーマンス&チューニング・ガイド
77
PERCENT_RANK() 関数
PERCENT_RANK 関数は、個別の順位ではなく、パーセンテージでのランク
を計算して、
0 ~ 1 の小数値を返します。つまり、PERCENT_RANK が返すの
はローの相対的なランクであり、この数値は、該当するウィンドウ・パーティ
ション内での現在のローの相対位置を表します。たとえば、順序付けカラムの
値がそれぞれ異なる
 10 個のローがパーティションに含まれている場合、この
パーティションの
 3 つ目のローに対する PERCENT_RANK の値は 0.222 ... と
なります。パーティションの
 1 つ目のローに続く 2/9 (22.222...%) のローをカ
バーしているためです。次の例に示すとおり、ローの
 PERCENT_RANK は、
「ローの
 RANK - 1」を「パーティション内のローの数 - 1」で割ったものとし
て定義されています
 (“ANT” は、REAL や DOUBLE PRECISION などの概数値
の型を表します
)。
PERCENT_RANK() OVER ws
これは次の指定に相当します。
CASE
WHEN COUNT (*) OVER ( ws RANGE BETWEEN UNBOUNDED
PRECEDING AND UNBOUNDED FOLLOWING ) = 1
THEN CAST (0 AS ANT)
ELSE
( CAST ( RANK () OVER ( ws ) AS ANT ) -1 /
( COUNT (*) OVER ( ws RANGE BETWEEN UNBOUNDED
PRECEDING AND UNBOUNDED FOLLOWING ) - 1 )
END
Sybase IQ リファレンス・マニュアル』の
も参照してください。
ランク付けの例
ランク付けの例
 1 
次の
 SQL クエリでは、マサチューセッツ州在住の男性従業
員と女性従業員を取得し、給与を基準として降順にランク付けしています。
SELECT emp_lname, salary, sex, RANK() OVER (ORDER BY
salary DESC) AS Rank 
FROM employee WHERE state IN ('MA') AND dept_id =100
ORDER BY salary DESC;
このクエリの結果セットを次に示します。
emp_lname
salary
sex
rank
---------
--------
---
----
Scott
96300.000
M
1
Lull
87900.000
M
2
Pastor
74500.000
F
3
Shishov
72995.000
F
4
Wang
68400.000
M
5
Sullivan
67890.000
F
6
Rabkin
64500.000
M
7
Cobb
62000.000
M
8