共通の ID でグループ化された複数のレコードに対して集計関数を実行しています。問題は、グループ化されたレコード内で異なる可能性がある他のフィールドもエクスポートしたいのですが、レコードの 1 つ (クエリの ORDER BY に従って最初のフィールド) から特定のフィールドを取得したいことです。
出発点の例:
SELECT
customer_id,
sum(order_total),
referral_code
FROM order
GROUP BY customer_id
ORDER BY date_created
紹介コードを照会する必要がありますが、集計関数の外でそれを行うということは、そのフィールドでもグループ化する必要があることを意味します。これは私が望んでいることではありません。この例では、顧客ごとに正確に 1 つの行が必要です。私は本当に最初の注文からの紹介コードだけを気にします.それ以降の紹介コードは喜んで破棄します.
これは PostgreSQL にありますが、他の DB の構文が十分に類似している可能性があります。
拒否されたソリューション:
- 順序が重要なため、max() または min() は使用できません。
- サブクエリは最初は機能するかもしれませんが、スケーリングしません。これは非常に縮小された例です。私の実際のクエリには、最初のインスタンスのみが必要な referral_code のような数十のフィールドと、サブクエリで重複するとメンテナンスの悪夢になる数十の WHERE 句があります。