sql – 在连接表上明确地对一列进行求和?

这是一个简单的问题,我不确定它是否可能存在.这是问题所在:

=> http://sqlfiddle.com/#!12/584f1/7

说明:

>票证属于与会者
>与会者有收入
>我需要按部分对门票进行分组并获得总收入.
>这会使与会者重复计算,因为2张票可以属于同一个与会者,因此会重复计算.我想获得收入的总和,但只计算一次与会者.

在我的sqlfiddle示例中,我想看到:

section | total_revenue
------------------------
A       | 40            <= 40 is correct, but I'm getting 50...
B       | null
C       | 40

我想在不使用子查询的情况下解决这个问题.我需要一个可扩展的解决方案,允许我在单个查询中针对不同联接的多个列执行此操作.所以无论是什么让我能够做到这一点,我都愿意接受建议.

谢谢你的帮助.

最佳答案 这是使用row_number()的版本:

select section,
  sum(revenue) Total
from 
(
  select t.section, a.revenue,
    row_number() over(partition by a.id, t.section order by a.id) rn
  from tickets t
  left join attendees a
    on t.attendee_id = a.id
) src
where rn = 1
group by section
order by section;

SQL Fiddle with Demo

点赞