はじめに:特定の基準で定義された各グループから一番上の行を取得することは、一般的なデータベース操作です。 postgreSQLはいくつかの方法を提供し、その効率と使いやすさのためにを際立たせます。
DISTINCT ON
選択された注文に基づいて、各グループ内の最初の行の選択をエレガントに処理します。 グループ化列と「最初の」行を決定する順序を指定します。
DISTINCT ON
構文と使用法:
句は簡潔です:
DISTINCT ON
<code class="language-sql">SELECT DISTINCT ON (group_column1, group_column2, ...) column1, column2, ... FROM table_name ORDER BY group_column1, group_column2, ..., ordering_column;</code>
group_column1
group_column2
、column1
column2
:各グループ内のソートを指定します。この順序に応じた最初の行が選択されます。ORDER BY
パフォーマンスの向上:
<code class="language-sql">SELECT DISTINCT ON (customer_id) customer_id, purchase_date, amount FROM purchases ORDER BY customer_id, purchase_date DESC;</code>
は一般的に効率的ですが、インデックス作成は、特に大規模なデータセットの場合、パフォーマンスを大幅に改善できます。 適切なインデックスは次のとおりです
DISTINCT ON
重要な考慮事項:
<code class="language-sql">CREATE INDEX purchases_idx ON purchases (customer_id, purchase_date DESC);</code>
ハンドルヌル:グループ化列に値が含まれている場合は、予測可能な結果を得るには
またはNULL
を使用してください。
NULLS LAST
結果の並べ替え:目的の出力順序がNULLS FIRST
順序付けと異なる場合、別のORDER BY
ステートメントでクエリを個別のDISTINCT ON
SELECT
結論:ORDER BY
以上が個別のオンを使用してPostgreSQLの各グループの最初の行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。