メインコンテンツにスキップ
モジュール 13 · レッスン 3 / 4コース内の 51/57~15 min
モジュールのレッスン (3/4)

ランキング: ROW_NUMBER、RANK、DENSE_RANK

ランキング: ROW_NUMBER、RANK、DENSE_RANK

ウィンドウ関数は、集計だけでなく、順序付けやランキングにも威力を発揮します。連続番号またはランキング位置を割り当てる、ウィンドウ内で動作するように特別に設計された関数があります (OVER() が必須になります)。

これらを基準に対して機能させるには、OVER() 内で ORDER BY 句を使用する必要があります。

ランキングトリオ

  1. ROW_NUMBER(): すべての行に単純な連続番号 (1、2、3...) を割り当て、任意に結合を解除します。
  2. RANK(): 「オリンピック」効果を生成します: 1、2、2、4。ギャップを残し (「3」はスキップされます)、同点の場合は同じランクを割り当てます。
  3. DENSE_RANK(): ランクを強化します: 1、2、2、3。同点の後にギャップが生じることはありません。
SQL
SELECT
  product_name,
  price,
  RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;

OVER() 内で PARTITION BY と ORDER BY を組み合わせることで、「各カテゴリのトップ 3」を取得できます。

運動#sql.m13.l3.e1
試行回数: 0読み込み中…

顧客テーブル ('customers') から 'first_name'、'last_name'、および 'id' を抽出します ('id' は識別番号であると仮定します)。 DENSE_RANK() を使用して、「id」の降順 (最高から最低へ) に基づいて「ランク」列を追加します。

エディターを読み込み中…
ヒントを表示

DENSE_RANK() OVER(ORDER BY ID DESC)。

3 回の試行後に解決策が利用可能になります

運動#sql.m13.l3.e2
試行回数: 0読み込み中…

製品 (「製品」) の価格に基づいて、「category_id」ごとにランキングを作成します。 「category_id」、「id」、「price」を抽出し、「price」の降順で ROW_NUMBER() を使用して「price_rank」を追加し、「category_id」で分割します。

エディターを読み込み中…
ヒントを表示

PARTITION BY category_id ORDER BY Price DESC を OVER 内で結合します。

3 回の試行後に解決策が利用可能になります