ウィンドウ関数前提# 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 参考 |
|