スポンサーリンク

【SQL】OVER句?ウィンドウ関数による順位付け

記事内に広告が含まれています。

SQLのウィンドウ関数は、クエリの結果セット内の行に対して計算を行うための関数で、データの分析や集計が効率的に行えます。

ウィンドウ関数は、以下の形式で使用されます。

<ウィンドウ関数> OVER (
  [PARTITION BY <列名>] 
  [ORDER BY <列名>] 
  [<ウィンドウフレーム指定>]
)

OVER句は、ウィンドウ関数とともに使用され、指定した範囲(ウィンドウ)内で集計や順位付けを行うための句です。例えば、SUM, AVG, ROW_NUMBER, RANKなどの関数と組み合わせて、グループ全体や一部に対する集計や順位を計算できます。

PARTITION BYはデータをグループに分割し、ORDER BYは各グループ内での行の順序を指定します。ウィンドウフレームは集計の範囲を指定します。

スポンサーリンク

順位付けをするウィンドウ関数

順位付けをするウィンドウ関数は、主に次の3つがあります。

  • RANK()
  • DENSE_RANK()
  • ROW_NUMBER()

これらの関数は、特定の順序で行に順位を付けます。

それぞれの違いを説明します。

RANK()

RANK()関数は、指定された順序に基づいて行に順位を付けます。

重複する値がある場合、同じ順位が付けられ、次の順位はスキップされます。

SELECT
  名前,
  得点,
  RANK() OVER (ORDER BY 得点 DESC) AS ランク
FROM
  成績表;

DENSE_RANK()

DENSE_RANK()関数も重複する値に同じ順位を付けますが、次の順位はスキップされず、連続した数値が付けられます。

SELECT
  名前,
  得点,
  DENSE_RANK() OVER (ORDER BY 得点 DESC) AS ランク
FROM
  成績表;

ROW_NUMBER()

ROW_NUMBER()関数は、指定された順序に基づいて各行に一意の順位を付けます。

重複する値があっても、一意の数値が付けられます。

SELECT
  名前,
  得点,
  ROW_NUMBER() OVER (ORDER BY 得点 DESC) AS ランク
FROM
  成績表;
スポンサーリンク

使用例

次に、各関数の使用例を示します。

成績表のデータが以下のようにあると仮定します。

名前得点
田中95
鈴木85
佐藤95
高橋75
伊藤85

RANK()の例

SELECT
  名前,
  得点,
  RANK() OVER (ORDER BY 得点 DESC) AS ランク
FROM
  成績表;

実行結果は以下のとおりです。

名前得点ランク
田中951
佐藤951
鈴木853
伊藤853
高橋755

DENSE_RANK()の例

SELECT
  名前,
  得点,
  DENSE_RANK() OVER (ORDER BY 得点 DESC) AS ランク
FROM
  成績表;

実行結果は以下のとおりです。

名前得点ランク
田中951
佐藤951
鈴木852
伊藤852
高橋753

ROW_NUMBER()の例

SELECT
  名前,
  得点,
  ROW_NUMBER() OVER (ORDER BY 得点 DESC) AS ランク
FROM
  成績表;

実行結果は以下のとおりです。

名前得点ランク
田中951
佐藤952
鈴木853
伊藤854
高橋755

おわりに

このように、ウィンドウ関数を使用することで、データの順位付けが簡単に行えます。各関数の違いを理解し、適切な場面で使用することで、より効果的なデータ分析が可能になります。

スポンサーリンク
SQL
著者SNS
タイトルとURLをコピーしました