ホームページ >データベース >mysql チュートリアル >異なる ORDER BY 条件を使用して PostgreSQL の DISTINCT 行をクエリするにはどうすればよいですか?
PostgreSQL DISTINCT クエリ: ORDER BY の不一致の処理
PostgreSQL の DISTINCT ON
句は、DISTINCT ON
式が最初の ORDER BY
基準と一致しない場合に問題を引き起こす可能性があります。 これは、DISTINCT ON
が、DISTINCT ON
句で決定された、ORDER BY
式で定義された各グループの最初の行を選択するためです。 順序が一致しないとエラーが発生します。
これを修正するには、通常、DISTINCT ON
式を ORDER BY
句の先頭の基準にする必要があります。 ただし、別の順序が望ましい場合は、別のアプローチを使用できます。
一意の行選択の代替方法
DISTINCT ON
のみに依存するのではなく、選択した順序に基づいて各グループから「一番上の」行を取得するための次の戦略を検討してください。
方法 1: グループごとの最大 N
このアプローチでは、サブクエリを使用して各グループ内の最大値 (または最小値) を特定し、元のテーブルに結合して対応する行を取得します。 以下に例を示します:
<code class="language-sql">SELECT t1.* FROM purchases t1 JOIN ( SELECT address_id, max(purchased_at) as max_purchased_at FROM purchases WHERE product_id = 1 GROUP BY address_id ) t2 ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at ORDER BY t1.purchased_at DESC;</code>
方法 2: ネストされた DISTINCT ON
クエリ
より簡潔な PostgreSQL 固有のソリューションでは、ネストされたクエリを使用します。
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT ON (address_id) * FROM purchases WHERE product_id = 1 ORDER BY address_id, purchased_at DESC ) t ORDER BY purchased_at DESC;</code>
これらのメソッドでは、グループ化基準と異なる場合でも、最終的な順序の制御を維持しながら、一意の行を柔軟に選択できます。 特定のニーズとデータ構造に最も適した方法を選択してください。
以上が異なる ORDER BY 条件を使用して PostgreSQL の DISTINCT 行をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。