PostgreSQL のグループ制限: カスタム列でソートされた各グループの上位 N 行を選択します
カスタム列順序に基づいて各グループの上位 N 行を取得するために、PostgreSQL はユーザー (特に PostgreSQL 8.4 以降を使用しているユーザー) にソリューションを提供します。
列「id」、「section_id」、および「name」を含むテーブルの例を考えてみましょう。
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 |
提供されたデータに基づいて、目的の出力は、「section_id」ごとに最初の 2 行 (「name」でソート) を選択することです。
PostgreSQL 8.4 以降のソリューション
<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>
この高度なソリューションでは、「PARTITION BY」および「ORDER BY」句を含む「ROW_NUMBER()」関数を利用して、目的の結果セットを取得します。 「xxx」テーブルの各行には、それぞれの「section_id」グループ内のランクが割り当てられ、行は「name」でソートされます。その後、条件「x.r
以上がPostgreSQL で特定の列で順序付けされたグループごとの上位 N 行を選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。