カテゴリ:

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

RANK

値が順序付けられたグループ内の値のランクを返します。

ランク値は1から始まり、続いていきます。

構文

RANK() OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <window_frame> ] )

ウィンドウフレーム 構文の詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。

引数

なし。

関数自体は、ウィンドウ内の現在の行のランク(相対位置)を返すため、引数を取りません。これは、 <expr2> によって順序付けられます。ウィンドウの順序によってランクが決まるため、追加のパラメーターを RANK 関数に渡す必要はありません。

使用上の注意

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

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

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

  • 式2 は、ランク付けする列を指定します。

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

  • タイ値は同じランク値になります。ただし、タイ値の数によってシーケンスのギャップが生じます。

    たとえば、3行が 1 を返す場合、 RANK は 23 をスキップして、グループの次の行に 4 を割り当てます。

  • ギャップを回避するには、代わりに DENSE_RANK 関数を使用してください。

農家のトウモロコシ生産を降順で、各農家の生産のランクとともに表示します(最高 = 1)。

SELECT state, bushels_produced, RANK()
  OVER (ORDER BY bushels_produced DESC)
  FROM corn_production;

+--------+------------------+------+
|  state | bushels_produced | RANK |
+--------+------------------+------+
| Kansas |              130 |     1|
| Kansas |              120 |     2|
| Iowa   |              110 |     3|
| Iowa   |              100 |     4|
+--------+------------------+------+

各州または州内で、農家のトウモロコシ生産量を降順で示し、各農家の生産量のランクを表示します(最高 = 1)。

SELECT state, bushels_produced, RANK()
  OVER (PARTITION BY state ORDER BY bushels_produced)
  FROM corn_production;

+--------+------------------+------+
|  state | bushels_produced | RANK |
+--------+------------------+------+
| Iowa   |              110 |     1|
| Iowa   |              100 |     2|
| Kansas |              130 |     1|
| Kansas |              120 |     2|
+--------+------------------+------+

以下のクエリと出力では、銘柄記号 SPY の値はタイ値の処理方法を示しています(ランクは 1224 です。ランク 2 が同点だったためランク 3 はスキップされます)。

SELECT
  symbol,
  exchange,
  price,
  RANK() OVER (PARTITION BY symbol ORDER BY price) AS rank
FROM trades;

+------+--------+------+----+
|symbol|exchange|price |RANK|
+------+--------+------+----+
|QQQ   |Q       | 83.99|   1|
|QQQ   |N       | 84.35|   2|
|QQQ   |Q       | 87.49|   3|
|QQQ   |N       | 88.50|   4|
|SPY   |P       |185.27|   1|
|SPY   |N       |186.29|   2|
|SPY   |N       |186.29|   2|
|SPY   |C       |188.47|   4|
|MSFT  |Q       | 38.77|   1|
|MSFT  |Q       | 39.55|   2|
|MSFT  |P       | 39.66|   3|
|MSFT  |P       | 40.00|   4|
|YHOO  |N       | 32.89|   1|
|YHOO  |Q       | 33.49|   2|
|YHOO  |Q       | 34.21|   3|
|YHOO  |P       | 34.48|   4|
|AAPL  |P       |568.33|   1|
|AAPL  |C       |569.42|   2|
|AAPL  |C       |570.37|   3|
|AAPL  |N       |571.94|   4|
+------+--------+------+----+