PostgreSQL: 各グループ内の上位 N 行の取得
PostgreSQL で頻繁に行われるタスクには、各グループから設定された数の行を選択することが含まれます。これは、「Grouped LIMIT」と呼ばれることが多い手法を使用して効率的に実現できます。 ウィンドウ関数 (PostgreSQL 8.4 以降で利用可能) を使用してこれを実現する方法は次のとおりです。
<code class="language-sql">SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS rn, t.* FROM xxx t ) AS x WHERE rn <= N;</code>
説明:
ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name)
ウィンドウ関数は、rn
列の順序で各 section_id
グループ内の各行に一意のランク (name
) を割り当てます。 次に、外側のクエリはこれらの結果をフィルターし、ランク (rn
) が N
以下の行のみを保持します (N
をグループあたりの必要な行数に置き換えます)。 これにより、結果が各グループの先頭の N
行に事実上制限されます。
以上がPostgreSQL の各グループ内の最初の N 行を効率的にフェッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。