メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

RANK ウィンドウ関数の例

ORDER BY によるランク付け

販売数量でテーブルで順序付けして (デフォルトは昇順)、行ごとにランクを割り当てます。結果はウィンドウ関数の結果が適用された後にソートされます。

Copy
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 句の外側には、Amazon Redshift が、このクエリが実行されるごとにソートされた結果を一貫して返すように、列 2 および 1 が含まれることに注意してください。例えば、販売 ID 10001 および 10006 の行は、QTY と RNK の値が同じです。列 1 によって最終的な結果セットを順序付けると、行 10001 は常に 10006 の前になります。WINSALES テーブルの説明については、「ウィンドウ関数の例」を参照してください。

PARTITION BY および ORDER BY によるランク付け

この例では、ウィンドウ関数 (order by qty desc) の順序付けは逆順になります。最高の QTY 値に最高ランクの値が適用されます。

Copy
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 によってテーブルをパーティションで分割し、数量で各パーティションを順序付けして (降順)、行ごとにランクを割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。

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