这是一个非常基本的问题,但出于某些原因,我找不到一个合理的解决方案。我会尽力解释。
假设你有一张活动门票(区域、排、座位号)。每张门票都属于一个参与者。多张门票可以属于同一个参与者。每个参与者都有一个价值(例如:参与者#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。因此,如果门票在不同的区域,他们将带着他们的按比例计算的价值。
感谢您的帮助。