DENSE_RANK ウィンドウ関数 - Amazon Redshift

DENSE_RANK ウィンドウ関数

DENSE_RANK ウィンドウ関数は、OVER 句の ORDER BY 式に基づいて、値のグループの値のランクを特定します。オプションの PARTITION BY 句がある場合、ランク付けは行のグループごとにリセットされます。ランク付け条件が同じ値の行は、同じランクを受け取ります。DENSE_RANK 関数はある点において RANK とは異なります。2 行以上で同点となった場合、ランク付けされた値の順位に差はありません。例えば、2 行が 1 位にランク付けされると、次のランクは 2 位になります。

同じクエリに PARTITION BY および ORDER BY 句のあるランク付け関数を使用することができます。

構文

DENSE_RANK () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )

引数

( )

この関数は引数を受け取りませんが、空のかっこは必要です。

OVER

DENSE_RANK 関数のウィンドウ句。

PARTITION BY expr_list

省略可能。ウィンドウを定義する 1 つ以上の式。

ORDER BY order_list

省略可能。ランク付けの値が基とする式。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。ORDER BY を省略した場合、すべての行について戻り値は 1 です。

ORDER BY で一意の並べ替えが行われない場合、行の順序は不確定になります。詳細については、「ウィンドウ関数用データの一意の並び順」を参照してください。

戻り型

INTEGER

次の例では、販売数量によってテーブルを順序付けして (降順)、各行にデンス値のランクと標準のランクの両方を割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。

select salesid, qty, dense_rank() over(order by qty desc) as d_rnk, rank() over(order by qty desc) as rnk from winsales order by 2,1; salesid | qty | d_rnk | rnk ---------+-----+-------+----- 10001 | 10 | 5 | 8 10006 | 10 | 5 | 8 30001 | 10 | 5 | 8 40005 | 10 | 5 | 8 30003 | 15 | 4 | 7 20001 | 20 | 3 | 4 20002 | 20 | 3 | 4 30004 | 20 | 3 | 4 10005 | 30 | 2 | 2 30007 | 30 | 2 | 2 40001 | 40 | 1 | 1 (11 rows)

DENSE_RANK および RANK 関数が同じクエリで並べて使用される場合、同じ行のセットに割り当てるランク付けの違いに注意してください。WINSALES テーブルの説明については、「ウィンドウ関数の概要の例」を参照してください。

次の例では、SELLERID によってテーブルをパーティション分割し、数量によって各パーティションを順序付けして (降順)、行ごとにデンス値のランクを割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。

select salesid, sellerid, qty, dense_rank() over(partition by sellerid order by qty desc) as d_rnk from winsales order by 2,3,1; salesid | sellerid | qty | d_rnk ---------+----------+-----+------- 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)

WINSALES テーブルの説明については、「ウィンドウ関数の概要の例」を参照してください。