連番テーブルと相関サブクエリ前提以下のように名前と年齢からなるusersテーブルがあるとする。これを年齢順に5位までのランキング算出する。 SELECT * FROM users ; id | name | age ----+--------+----- 1 | taro | 20 2 | jiro | 15 3 | saburo | 10 4 | hanako | 18 5 | ichiro | 15 6 | ken | 25 方法 SELECT x.rank
, x.arr[1] AS age
, x.arr[2] AS name
FROM (
SELECT num::int + 1 AS rank
, (
SELECT ARRAY[age::text
, name]
FROM users
ORDER BY age DESC LIMIT 1 OFFSET num
) AS arr
FROM generate_series(0,4) num
) x;
rank | age | name
------+-----+--------
1 | 25 | ken
2 | 20 | taro
3 | 18 | hanako
4 | 15 | jiro
5 | 15 | ichiro
|
|