翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
RANK ウィンドウ関数
RANK ウィンドウ関数は、 OVER句の ORDER BY 式に基づいて、値のグループ内の値のランクを決定します。オプションの PARTITION BY 句が存在する場合、行のグループごとにランクがリセットされます。ランク付け条件の値が等しい行は同じランクを受け取ります。 は、結合された行の数を結合されたランク AWS Clean Rooms に追加して次のランクを計算するため、ランクは連続した数値ではない可能性があります。例えば、2 行が 1 位にランク付けされると、次のランクは 3 位になります。
RANK は と 1 つの点DENSE_RANK ウィンドウ関数で異なります。DENSE_ ではRANK、2 つ以上の行が結合されている場合、ランク付けされた値のシーケンスにギャップはありません。例えば、2 行が 1 位にランク付けされると、次のランクは 2 位になります。
同じクエリで、異なる PARTITION BY 句と ORDER BY 句を持つランク付け関数を持つことができます。
構文
RANK () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )
引数
- ( )
-
この関数は引数を受け取りませんが、空のかっこは必要です。
- OVER
-
RANK 関数のウィンドウ句。
- PARTITION BY expr_list
-
オプション。ウィンドウを定義する 1 つ以上の式。
- ORDER order_list による
-
オプション。ランク付けの値が基とする列を定義します。PARTITION BY が指定されていない場合、ORDERBY はテーブル全体を使用します。ORDER BY を省略すると、すべての行の戻り値は 1 になります。
ORDER BY が一意の順序を生成しない場合、行の順序は不確定です。詳細については、「ウィンドウ関数用データの一意の並び順」を参照してください。
戻り型
INTEGER
例
次の例では、販売数量でテーブルで順序付けして (デフォルトは昇順)、行ごとにランクを割り当てます。1 のランク値は、もっとも高いランクの値です。結果はウィンドウ関数の結果が提供された後にソートされます。
select salesid, qty, rank() over (order by qty) as rnk from winsales order by 2,1; salesid | qty | rnk --------+-----+----- 10001 | 10 | 1 10006 | 10 | 1 30001 | 10 | 1 40005 | 10 | 1 30003 | 15 | 5 20001 | 20 | 6 20002 | 20 | 6 30004 | 20 | 6 10005 | 30 | 9 30007 | 30 | 9 40001 | 40 | 11 (11 rows)
この例の外部 ORDER BY 句には列 2 と 1 が含まれており、このクエリが実行されるたびに が一貫してソートされた結果を AWS Clean Rooms 返すことに注意してください。たとえば、売上 10001 IDs と 10006 の行の QTYと RNKの値は同じです。列 1 によって最終的な結果セットを順序付けると、行 10001 は常に 10006 の前になります。WINSALES テーブルの説明については、「ウィンドウ関数例のサンプルテーブル」を参照してください。
次の例では、ウィンドウ関数 (order by qty desc
) の順序付けは逆順になります。これで、最高ランクの値が最大値に適用されますQTY。
select salesid, qty, rank() over (order by qty desc) as rank from winsales order by 2,1; salesid | qty | rank ---------+-----+----- 10001 | 10 | 8 10006 | 10 | 8 30001 | 10 | 8 40005 | 10 | 8 30003 | 15 | 7 20001 | 20 | 4 20002 | 20 | 4 30004 | 20 | 4 10005 | 30 | 2 30007 | 30 | 2 40001 | 40 | 1 (11 rows)
WINSALES テーブルの説明については、「ウィンドウ関数例のサンプルテーブル」を参照してください。
次の例では、テーブルを でパーティションSELLERID化し、数量 (降順) で各パーティションを並べ替え、各行にランクを割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。
select salesid, sellerid, qty, rank() over (partition by sellerid order by qty desc) as rank from winsales order by 2,3,1; salesid | sellerid | qty | rank --------+----------+-----+----- 10001 | 1 | 10 | 2 10006 | 1 | 10 | 2 10005 | 1 | 30 | 1 20001 | 2 | 20 | 1 20002 | 2 | 20 | 1 30001 | 3 | 10 | 4 30003 | 3 | 15 | 3 30004 | 3 | 20 | 2 30007 | 3 | 30 | 1 40005 | 4 | 10 | 2 40001 | 4 | 40 | 1 (11 rows)