这是一个简单的问题,我不确定它是否可能存在.这是问题所在:
=> 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;