Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

データベーステーブルに連番で数字を付けたいと思うケースは多々あります。

例えばソートをした場合など、通しで連番がついていないケースでは非常に扱い難いデータとなる可能性も。

そんな時に連番を振れるクエリがあれば便利ですよね?

そこで今回は「連番」に的を絞って記事にしていきたいと思います。

これをマスターすればいちいちデータ全体を見直す必要がなくなるので是非とも覚えましょう!

連番を振る

SQLには「ROW_NUMBER」という関数が存在します。

このROW_NUMBER関数はSELECTした結果に連番を振ることが出来る関数となっています。

使い方

早速ROW_NUMBER関数の使い方について説明していきます。

まず記述についてですが、基本的には次のように行います。

ROW_NUMBER() OVER(ORDER BY [column_name] ASC/DESC)

連番は「ROW_NUMBER関数 + OVER句 + ORDER BY」で範囲を指定して並び替えることで解決します。

それでは実際にコードで見てみましょう。

まず今回使用するテーブルの内容です。

Name                                Color    StandardCost          Size  SellStartDate
----------------------------------- -------- --------------------- ----- -----------------------
HL Road Frame - Black, 58           Black                1059.3100 58    2002-06-01 00:00:00.000
HL Road Frame - Red, 58             Red                  1059.3100 58    2002-06-01 00:00:00.000
Sport-100 Helmet, Red               Red                    13.0863 NULL  2005-07-01 00:00:00.000
Sport-100 Helmet, Black             Black                  13.0863 NULL  2005-07-01 00:00:00.000
Mountain Bike Socks, M              White                   3.3963 M     2005-07-01 00:00:00.000
Mountain Bike Socks, L              White                   3.3963 L     2005-07-01 00:00:00.000
Sport-100 Helmet, Blue              Blue                   13.0863 NULL  2005-07-01 00:00:00.000
AWC Logo Cap                        Multi                   6.9223 NULL  2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, S          Multi                  38.4923 S     2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, M          Multi                  38.4923 M     2005-07-01 00:00:00.000
・
・
・
・

今回使うテーブルはSQL Serverのサンプルデータを一部カスタマイズして利用します。

またレコードは500件ほど入っていますが、一部のみ抜粋しています。

なおこのテーブルでは連番となっているカラムがありません。

これではデータとしてあまりにも使い難いため、ROW_NUMBER関数を使って名前を基準とした昇順に並べ替え、連番のIDを振ってみます。

実際の記述は次のようになります。

select top 10
	ROW_NUMBER() OVER(ORDER BY Name ASC) id, *
FROM
	sample_db.dbo.Product
GO

id      Name                       Color     StandardCost     Size  SellStartDate
------- -------------------------- --------- ---------------- ----- -----------------------
      1  All-Purpose Bike Stand     NULL      59.4660          NULL  2007-07-01 00:00:00.000
      2  AWC Logo Cap               Multi     6.9223           NULL  2005-07-01 00:00:00.000
      3  Bike Wash - Dissolver      NULL      2.9733           NULL  2007-07-01 00:00:00.000
      4  Cable Lock                 NULL      10.3125          NULL  2006-07-01 00:00:00.000
      5  Chain                      Silver    8.9866           NULL  2007-07-01 00:00:00.000
      6  Classic Vest, L            Blue      23.7490          L     2007-07-01 00:00:00.000
      7  Classic Vest, M            Blue      23.7490          M     2007-07-01 00:00:00.000
      8  Classic Vest, S            Blue      23.7490          S     2007-07-01 00:00:00.000
      9  Fender Set - Mountain      NULL      8.2205           NULL  2007-07-01 00:00:00.000
     10  Front Brakes               Silver    47.2860          NULL  2007-07-01 00:00:00.000

RANKとの違い

SQLにはもう一つ「RANK」という連番を振るための関数が存在しますが、RANKとROW_NUMBERには明確な違いがあります。

RANKは同位に対して同順を振り、同位でも異順を振るのがROW_NUMBERとなります。

もう少しわかりやすく説明するなら、RANKを使った場合にはソート時に同じ順位付けをされるものが出てくる可能性があるということです。

このことから、単純に連番を付ける関数として考えた場合にはROW_NUMBERの方が向いているといえます。

まとめ

いかがでしたか?

今回は連番を振る関数である「ROW_NUMBER」について解説してみました。

ROW_NUMBER自体はそんなに覚えることが多いわけではない為、少ない説明でもマスターすることは出来るはずです。

ただ、RANKとの違いを覚えておかないとケースによって使い分けることが難しくなる可能性もありますので、しっかりと知識も増やしていきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。