カテゴリ:

ウィンドウ関数 (ランク関連、ウィンドウフレーム)

PERCENT_RANK

値のグループ内における、値の相対ランクを返します。ランクは、0.0から1.0の範囲の割合で指定されます。

構文

PERCENT_RANK() OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <cumulativeRangeFrame> ] )
Copy

条件:

cumulativeRangeFrame ::=
    {
       RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
     | RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
    }
Copy

使用上の注意

  • expr1 は、パーティション化する列(または式)を指定します。

    たとえば、各州で生産したトウモロコシの量で農家を順番にランク付けするとします。この場合、状態ごとにパーティション分割します。

    単一のグループのみが必要な場合(たとえば、米国のどの州に住んでいるかに関係なくすべての農家をランク付けする場合)、 PARTITION BY 句を省略します。

  • expr2 は、ランク付けする列(または式)を指定します。

    たとえば、農家をランキングして、誰が(州内で)最も多くのトウモロコシを生産したかを見る場合、 bushels_produced 列を使用します。詳細については、 (このトピック内)をご参照ください。

  • PERCENT_RANK は、次のように計算されます。

    nが1の場合:

    PERCENT_RANK = 0

    nが1より大きい場合:

    PERCENT_RANK = (r - 1) / (n - 1)

    r は、行の RANK であり、 n はウィンドウパーティションの行数です。

  • 値の範囲は0.0〜1.0.真のパーセントを得るためには、100を掛けます。

  • PERCENT_RANK は範囲ベースの累積 ウィンドウフレーム をサポートしますが、他のタイプのウィンドウフレームはサポートしません。範囲ベースの累積ウィンドウフレームの構文の詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。

SELECT
  exchange,
  symbol,
  PERCENT_RANK() OVER (PARTITION BY exchange ORDER BY price) AS percent_rank
FROM trades;

+--------+------+------------+
|exchange|symbol|PERCENT_RANK|
+--------+------+------------+
|C       |SPY   |         0.0|
|C       |AAPL  |         0.5|
|C       |AAPL  |         1.0|
|N       |YHOO  |         0.0|
|N       |QQQ   |         0.2|
|N       |QQQ   |         0.4|
|N       |SPY   |         0.6|
|N       |SPY   |         0.6|
|N       |AAPL  |         1.0|
|Q       |YHOO  |         0.0|
|Q       |YHOO  |         0.2|
|Q       |MSFT  |         0.4|
|Q       |MSFT  |         0.6|
|Q       |QQQ   |         0.8|
|Q       |QQQ   |         1.0|
|P       |YHOO  |         0.0|
|P       |MSFT  |        0.25|
|P       |MSFT  |         0.5|
|P       |SPY   |        0.75|
|P       |AAPL  |         1.0|
+--------+------+------------+
Copy