Menu
Coddy logo textTech

RANK & DENSE_RANK関数

CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 65/72。

ROW_NUMBER()はランキング関数の一種で、ほかにRANK()DENSE_RANK()の2つがあります。

RANK()関数はROW_NUMBER()のように行に番号を付けますが、同じ行には同じ番号を付け、番号を飛ばします。DENSE_RANK()RANK()に似ていますが、番号を飛ばしません。

例:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

次の結果が返されます:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

説明:

  • ROW_NUMBER():常に一意:1、2、3、4、5、6
  • RANK()
    • レベル 5(2 行):どちらもランク 1 を取得
    • レベル 6(2 行):どちらもランク 3 を取得(2 をスキップ)
    • レベル 7(2 行):どちらもランク 5 を取得(4 をスキップ)
  • DENSE_RANK()
    • レベル 5(2 行):どちらもランク 1 を取得
    • レベル 6(2 行):どちらもランク 2 を取得(スキップなし)
    • レベル 7(2 行):どちらもランク 3 を取得(スキップなし)
challenge icon

チャレンジ

簡単

利用可能なテーブルとカラム:

  • medalsregionmedal_colormedal_count

地域、メダルの合計数(色に関係なくすべてのメダルの合計)、および2種類の順位を表示するクエリを作成してください:

  1. regular_rank(順位の間に欠番あり)をメダルの合計に基づいて取得する
  2. dense_rank(順位の間に欠番なし)をメダルの合計に基づいて取得する

結果を次の順序で並べ替えてください:

order by total_medals desc, region asc

自分で試してみよう

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド