ホームページ > データベース > mysql チュートリアル > PostgreSQL の各グループ内の上位 N 行を選択するにはどうすればよいですか?

PostgreSQL の各グループ内の上位 N 行を選択するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-15 10:46:46
オリジナル
539 人が閲覧しました

How to Select the Top N Rows within Each Group in PostgreSQL?

PostgreSQL でグループ化 LIMIT を使用してグループ内の行を選択する

PostgreSQL では、ウィンドウ関数と PARTITION BY 句を使用して、各グループの最初の N 行を取得できます。この手法は、各グループ内の行を特定の列で並べ替える必要がある場合に特に役立ちます。

次の形式を考えてみましょう:

<code class="language-sql">CREATE TABLE xxx (
  id SERIAL PRIMARY KEY,
  section_id INT,
  name VARCHAR(255)
);
INSERT INTO xxx (id, section_id, name) VALUES
  (1, 1, 'A'),
  (2, 1, 'B'),
  (3, 1, 'C'),
  (4, 1, 'D'),
  (5, 2, 'E'),
  (6, 2, 'F'),
  (7, 3, 'G'),
  (8, 2, 'H');</code>
ログイン後にコピー

name 列でソートされた各セクション ID の最初の 2 行を抽出するには、次のクエリを使用できます:

<code class="language-sql">SELECT
  * 
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r,
    t.*
  FROM
    xxx t) x
WHERE
  x.r <= 2;</code>
ログイン後にコピー

このクエリは、ROW_NUMBER() ウィンドウ関数を使用して、各グループに 1 から始まる一意の行番号を割り当てます。データをsection_idで分割し、各グループ内で行を名前でソートすることにより、ソートされたレコードに連続した行番号が割り当てられます。最後に、外側のクエリは行番号が 2 より大きい行をフィルターで除外し、セクション ID ごとに最初の 2 行を効果的に選択します。

以上がPostgreSQL の各グループ内の上位 N 行を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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