これは非常に基本的な問題であり、何らかの理由で合理的な解決策を見つけることができません。私は説明するために最善を尽くします。
イベント チケット (セクション、列、座席番号) を持っているとします。各チケットは出席者に属します。複数のチケットが同じ出席者に属することができます。各出席者には価値があります (例: 出席者 #1 は $10,000 の価値があります)。そうは言っても、ここで私がやりたいことは次のとおりです。
1. Group the tickets by their section
2. Get number of tickets (count)
3. Get total worth of the attendees in that section
ここで問題が発生します。参加者 #1 の価値が $10,000 で、4 枚のチケットを使用している場合、sum(attendees.worth) は $40,000 を返します。これは正確ではありません。価値は10,000ドルのはずです。しかし、出席者の結果を明確にすると、カウントは正確ではありません。理想的な世界では、次のようなことをするのがいいでしょう
select
tickets.section,
count(tickets.*) as count,
sum(DISTINCT ON (attendees.id) attendees.worth) as total_worth
from
tickets
INNER JOIN
attendees ON attendees.id = tickets.attendee_id
GROUP BY tickets.section
明らかに、このクエリは機能しません。単一のクエリでこれと同じことを達成するにはどうすればよいですか? またはそれは可能ですか?これは、複数のテーブルでこれを行う必要があるはるかに大きなソリューションの一部であるため、サブクエリも避けたいと思います。
また、価値は均等に分割されたチケットに従う必要があります。例: $10,000 / 4. 各チケットの出席者は $5,000 相当です。そのため、チケットが異なるセクションにある場合、それらは比例配分された価値を持ちます。
ご協力いただきありがとうございます。