1. ホーム
  2. sql

[解決済み】PostgreSQLでグループ化されたLIMIT:各グループの最初のN行を表示する?

2022-04-07 04:17:48

質問

各グループの最初のN行を、カスタムカラムで並べ替える必要があります。

次のような表があるとします。

db=# SELECT * FROM xxx;
 id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  3 |          1 | C
  4 |          1 | D
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G
  8 |          2 | H
(8 rows)

最初の2行が必要です(順序は 名前 ) の各 セクションID というような結果が得られます。

 id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G
(5 rows)

PostgreSQL 8.3.5を使用しています。

解決方法を教えてください。

新しい解決策(PostgreSQL 8.4)

SELECT
  * 
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r,
    t.*
  FROM
    xxx t) x
WHERE
  x.r <= 2;