gpt4 book ai didi

sql - 在 Postgresql 中使用 distinct 然后聚合函数?

转载 作者:太空狗 更新时间:2023-10-30 01:49:43 26 4
gpt4 key购买 nike

这是一个非常基本的问题,无论出于何种原因,我都找不到合理的解决方案。我会尽力解释。

假设您有一张事件门票(部分、行、座位号)。每张票属于一位与会者。多张门票可以属于同一个与会者。每个与会者都有一个值(value)(例如:与会者 #1 值(value) 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 值(value) 10,000 美元并且使用了 4 张票,则 sum(attendees.worth) 返回 40,000 美元。这是不准确的。值(value)应该是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

显然这个查询不起作用。我怎样才能在单个查询中完成同样的事情?或者甚至有可能吗?我也更愿意远 ionic 查询,因为这是一个更大的解决方案的一部分,我需要跨多个表执行此操作。

另外,值(value)应该按照门票平分。例如:10,000 美元/4。每张门票有一个值(value) 5,000 美元的与会者。因此,如果门票位于不同的部分,它们会带走按比例分配的值(value)。

感谢您的帮助。

最佳答案

您需要在与会者之前汇总门票:

select ta.section, sum(ta.numtickets) as count, sum(a.worth) as total_worth
from (select attendee_id, section, count(*) as numtickets
from tickets
group by attendee_id, section
) ta INNER JOIN
attendees a
ON a.id = ta.attendee_id
GROUP BY ta.section

您仍然遇到一个与会者在多个部分有座位的问题。但是,您没有具体说明如何解决(分配值(value)?随机选择一个部分?将其分配给所有部分?规范地选择一个部分?)

关于sql - 在 Postgresql 中使用 distinct 然后聚合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12786670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com