第 4 章 OLAP の使用
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 )
( 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 |
パフォーマンス&チューニング・ガイド | 77 |