Sybase 12.7 Home Theater System User Manual


 
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 リファレンス・マニュアル』の「第 5 SQL 関数」
PERCENT_RANK 関数 [ 統計 ]も参照してください。
ランク付けの例
ランク付けの例 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