在Postgresql中使用distinct然后使用聚合函数?
这是一个非常基本的问题,无论出于什么原因,我都找不到合理的解决方案。我会尽力解释的 假设你有一张活动票,一排,一个座位。每张票属于一名与会者。多张票可以属于同一与会者。每个与会者都有一个价值,例如:与会者1价值10000美元。也就是说,我想做的是:在Postgresql中使用distinct然后使用聚合函数?,sql,database,postgresql,distinct,aggregate-functions,Sql,Database,Postgresql,Distinct,Aggregate Functions,这是一个非常基本的问题,无论出于什么原因,我都找不到合理的解决方案。我会尽力解释的 假设你有一张活动票,一排,一个座位。每张票属于一名与会者。多张票可以属于同一与会者。每个与会者都有一个价值,例如:与会者1价值10000美元。也就是说,我想做的是: 1. Group the tickets by their section 2. Get number of tickets (count) 3. Get total worth of the attendees in that section 这
1. Group the tickets by their section
2. Get number of tickets (count)
3. Get total worth of the attendees in that section
这里是我遇到的问题:如果Attendene1价值10000美元,并且使用了4张票,那么SumAttendenes.worth将返还40000美元。这是不准确的。价值应该是10000美元。然而,当我在与会者身上对结果进行区分时,计数并不准确。在理想的世界里,做这样的事情会很好
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
显然,这个查询不起作用。如何在一个查询中完成同样的事情?或者甚至有可能吗?我更愿意远离子查询,因为这是一个更大的解决方案的一部分,我需要跨多个表执行此操作
此外,价值应跟随票面平均分配。例:10000/4。每张票有一名价值5000美元的与会者。因此,如果门票分为不同的部分,他们会按比例携带门票
感谢您的帮助。您需要在与会者面前汇总门票:
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
您仍然存在单个与会者在多个部分拥有座位的问题。但是,您没有指定如何解决分摊价值的问题?随机选择一个部分?把它归于所有部分?使用jsonb_object_agg规范地选择节?: 选择 售票处, 计算票数。*作为计数, 选择SUMvalue::int4 从jsonb_每个_文本jsonb_对象_aggatees.id,Attendes.worth 总价值 从…起 票 内连接 Attendes.id上的与会者=tickets.attendee\u id 按票分组
谢谢你这么说,但这不就是价值的数倍吗?价值由票的数量决定。例:1号与会者价值10000美元,正在使用4张票。每张票价值5000美元。因此,如果每张票位于不同的区段,它将在相应区段中增加5000美元。这有意义吗?这不会产生错误吗?派生表ta未正确分组。我很肯定PostgreSQL会拒绝的。@a_horse_没有名字。是的,我修改了代码以符合我的意图。我知道已经有一段时间了,但我遇到了完全相同的问题,我想知道您是否能够解决它。