新婚システムエンジニアのブログ

新婚システムエンジニア(SE)のブログです。IT系の話や資格関連、結婚生活について書きます

【Oracle】【SQL】ROW_NUMBER関数で行番号取得する例(partition byを使用)

f:id:STSA:20180605221016p:plain
OracleのROW_NUMBER関数で行番号取得する例(partition byを使用)についてです。
partition byを使うシーンとしては、何かのデータ毎に順位付けをしたい場合に使います。

例に使うテーブルとデータは以下を使用します。

CREATE TABLE Table1
    ("id" int, "dvalue" int, "ddata" varchar2(1))
;

INSERT ALL 
    INTO Table1 ("id", "dvalue", "ddata")
         VALUES (1, 200, 'A')
    INTO Table1 ("id", "dvalue", "ddata")
         VALUES (2, 100, 'B')
    INTO Table1 ("id", "dvalue", "ddata")
         VALUES (3, 400, 'C')
    INTO Table1 ("id", "dvalue", "ddata")
         VALUES (4, 100, 'A') 
    INTO Table1 ("id", "dvalue", "ddata")
         VALUES (5, 300, 'B') 
     INTO Table1 ("id", "dvalue", "ddata")
         VALUES (6, 200, 'B') 
SELECT * FROM dual
;

上記のデータはSQLを実行すると以下のようになります。
f:id:STSA:20180603140022p:plain

では、このデータでddataのデータ毎にdvalueを高い順(降順)の順番で行番号を取得してみます。
(やりたいこととしては、ddataのAやBやC毎にdvalueの値で順位付けをする。)

SQLは以下のようなSQLになります。

select "id" , "dvalue", "ddata" , row_number() over (partition by "ddata" order by "dvalue" desc) from TABLE1;

実行結果
f:id:STSA:20180603135754p:plain

ddataのデータ毎に順位をつけることができていますね。

以上、ROW_NUMBER関数で行番号取得する例(partition byを使用)についてでした。

関連記事
stsa.hatenablog.com