PostgreSQL如何按关联表收入占比分摊成本至各国家渠道
问题原因
你当前查询的错误出在LEFT JOIN的关联条件上:只关联了event_date日期字段,没有关联country国家字段,导致每个成本表的行都会匹配到同一日期下所有国家的收入占比记录,取MAX(t1.revenue_share)时自然永远拿到最大值0.6,无法匹配到对应国家的收入占比。
另外你写的按国家判断的CASE语句是完全冗余的,关联条件修正后可以直接删除。
修改后的查询语句
SELECT c.event_date, c.country, c.channel, c.costs_per_day_per_country * r.revenue_share / COUNT(*) OVER (PARTITION BY c.event_date, c.country) AS costs FROM costs c LEFT JOIN revenue r ON r.event_date = c.event_date AND r.country = c.country ORDER BY 1,2,3;
执行后即可得到你预期的分摊结果。
内容的提问来源于stack exchange,提问作者Michi
相关产品推荐
相关产品推荐

