ホームページ > データベース > mysql チュートリアル > PostgreSQL の各グループ内の最初の N 行を効率的にフェッチするにはどうすればよいですか?

PostgreSQL の各グループ内の最初の N 行を効率的にフェッチするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-15 11:05:45
オリジナル
447 人が閲覧しました

How to Efficiently Fetch the First N Rows Within Each Group in PostgreSQL?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート