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