ウィンドウ関数

前提

 # SELECT * FROM t1;
  id | num | grp 
 ----+-----+-----
   1 | 100 |   1
   2 | 200 |   1
   3 | 500 |   1
   4 | 300 |   2
   5 | 200 |   2
   7 | 300 |   2
   6 | 400 |   2

row_number()

row_number() OVER() で行番号を付与する。

 # SELECT row_number() OVER(), id, num FROM t1;
  row_number | id | num 
 ------------+----+-----
           1 |  1 | 100
           2 |  2 | 200
           3 |  3 | 500
           4 |  4 | 300
           5 |  5 | 200
           6 |  7 | 300
           7 |  6 | 400

row_number() OVER(ORDER BY id DESC) でIDを降順にソートして行番号を付与する。

 # SELECT row_number() OVER(ORDER BY id DESC), id, num FROM t1;
  row_number | id | num 
 ------------+----+-----
           1 |  7 | 300
           2 |  6 | 400
           3 |  5 | 200
           4 |  4 | 300
           5 |  3 | 500
           6 |  2 | 200
           7 |  1 | 100

rank()

rank() OVER(ORDER BY num DESC) でNUMを降順にソートして順位を付与する。

 # SELECT rank() OVER(ORDER BY num DESC), id, num FROM t1;
  rank | id | num 
 ------+----+-----
     1 |  3 | 500
     2 |  6 | 400
     3 |  4 | 300
     3 |  7 | 300
     5 |  5 | 200
     5 |  2 | 200
     7 |  1 | 100

rank() OVER(PARTITION BY grp ORDER BY num DESC) でグループ=2に絞ってNUMを降順にソートして順位を付与する。

 # SELECT rank() OVER(PARTITION BY grp ORDER BY num DESC), id, grp, num FROM t1 WHERE grp = 2;
  rank | id | grp | num 
 ------+----+-----+-----
     1 |  6 |   2 | 400
     2 |  4 |   2 | 300
     2 |  7 |   2 | 300
     4 |  5 |   2 | 200

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-10-31 (月) 16:06:50