これはかなり基本的な問題です。何らかの理由で私は合理的な解決策を見つけることができません。私は説明するために全力を尽くします。PostgreSQLでdistinct関数とaggregate関数を使用していますか?
イベントチケット(セクション、行、座席番号)があるとします。各チケットは出席者に属します。複数のチケットは同じ出席者に属することができます。各出席者は価値があります(例:出席者#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枚のチケットを使用している場合は、合計(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
明らかにこのクエリは機能しません。どのようにして同じ質問を1つのクエリで達成できますか?またはそれは可能ですか?私は複数のテーブルでこれを行う必要があるはるかに大きなソリューションの一部であるので、私はサブクエリから遠ざかることを好むでしょう。
また、価値は均等に分けられた切符に従うべきです。例:$ 10,000/4。各チケットには$ 5,000の出席者がいます。したがって、チケットが異なるセクションにある場合、チケットはそれらと比例した価値を持ちます。
ありがとうございました。
まあまあですが、あなたがそれを解決できるかどうか疑問に思っています。 – denaje