ホームページ > データベース > mysql チュートリアル > PostgreSQL の DISTINCT ON の不一致 ORDER BY 句エラーを解決するにはどうすればよいですか?

PostgreSQL の DISTINCT ON の不一致 ORDER BY 句エラーを解決するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-21 12:08:11
オリジナル
202 人が閲覧しました

How to Resolve PostgreSQL's DISTINCT ON Mismatched ORDER BY Clause Error?

PostgreSQL の DISTINCT ON 句の不一致エラーのトラブルシューティング

PostgreSQL の DISTINCT ON 句では、個別の列と正確に一致する ORDER BY 式が必要です。 異なる式を使用してクエリを実行しようとすると、エラーが発生します。 address_id 句の最初の要素として ORDER BY を追加するだけでは、エラーを解決できますが、意図した結果が返されない可能性があります。

ORDER BY 句内の DISTINCT ON を変更せずに正しいデータを取得する別の方法を次に示します。

方法 1: グループごとの最大 N アプローチ (DBMS に依存しない)

このメソッドは、サブクエリを使用して各 purchased_at の最大 address_id を検索し、元のテーブルに結合して完全な行を取得します。

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;
ログイン後にコピー

方法 2: PostgreSQL 固有のソリューション

このアプローチでは、ネストされたクエリを活用し、内部クエリで DISTINCT ON を使用して各 address_id に必要な行を選択し、必要に応じて外部クエリで最終結果を順序付けします。

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;
ログイン後にコピー

これらのアプローチは、DISTINCT ON 句の ORDER BY 式で妥協する必要を避け、希望の並べ替え順序を維持しながら必要なデータを取得するための柔軟なソリューションを提供します。

以上がPostgreSQL の DISTINCT ON の不一致 ORDER BY 句エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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