Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Postgresql中使用distinct然后使用聚合函数?_Sql_Database_Postgresql_Distinct_Aggregate Functions - Fatal编程技术网

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

在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价值10000美元。也就是说,我想做的是:

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_没有名字。是的,我修改了代码以符合我的意图。我知道已经有一段时间了,但我遇到了完全相同的问题,我想知道您是否能够解决它。