ウィンドウ関数

前提

# 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 (2598d)