You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件的窗口求和:用Window Function计算用户2020年营收总和

如何用窗口函数计算特定年份的用户营收总和?

没问题,你完全可以用窗口函数实现这个需求!你之前的写法问题出在分区条件上,导致2019年的行只能计算当年的营收总和,而不是我们想要的2020年的用户总营收。

正确的SQL语句

select 
    *, 
    sum(case when year = 2020 then revenue else 0 end) over (partition by userid) as 2020_user_revenue 
from table

逻辑解释

  • partition by userid:按用户ID分区,确保同一个用户的所有行都在同一个计算分组内
  • sum(case when year = 2020 then revenue else 0 end):在求和时仅统计年份为2020的营收数据,其他年份的营收按0处理,这样最终得到的就是该用户2020年的总营收,并且会填充到该用户的每一行数据中

执行结果

执行上述SQL后,就能得到你期望的结果:

yearuseridorderidrevenue2020_user_revenue
20191a150150
20201a2100150
20201a350150
20192b1100100
20202b2100100

为什么你之前的写法不对?

你之前的sum(revenue) over (partition by year, userid)是按年份+用户ID分区,这会把同一用户的2019年和2020年数据分成两个独立的分组,所以2019年的行计算的是该用户2019年的营收总和,而非我们需要的2020年总和。通过调整分区条件并加入条件求和,就能精准获取特定年份的用户总营收啦。

内容的提问来源于stack exchange,提问作者conley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:56:38