子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

【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

【Oracle】【SQL】ROW_NUMBER関数で行番号取得する例

f:id:STSA:20180603221921p:plain

OracleのROW_NUMBER関数で行番号取得する例についてです。

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

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')
SELECT * FROM dual;

上記のSQLを実行すると次のようなデータができます。
f:id:STSA:20180603140348p:plain

では、このデータでdvalueを高い順(降順)の順番で行番号を取得してみます。
SQLは以下のようなSQLになります。

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

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

ROW_NUMBER関数で行番号取得する例についてでした。

関連記事
stsa.hatenablog.com