PERCENT_RANK() 関数

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 ) -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

パフォーマンス&チューニング・ガイド

77

Page 93
Image 93
Sybase 12.7 manual Percent_Rank 関数, パフォーマンス&チューニング・ガイド