You need to enable JavaScript to run this app. PostgreSQL用OVER PARTITION BY date计算多投资者合并日度统计数据
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL用OVER PARTITION BY date计算多投资者合并日度统计数据

PostgreSQL多投资者日度收益统计查询

本问题延续自PostgreSQL投资者日度投资占比计算相关的已有问题。

基于原有问题的逻辑,我需要编写一个SQL查询,基于多名投资者的投资数据生成日度统计指标。

需求示例

假设共有4名投资者,我需要获取其中2名投资者的合并日度统计数据,最终输出的表结构如下:

datetotal_profittotal_investmentuser_investmentinvestment_shareuser_shareuser_profit
2021-01-0150010000500050.0038.286595.71625
2021-01-0220010000500050.0038.286538.2865
2021-01-0318515000250016.6616.333615.1085
2021-01-0417515000300020.0011.24789.8418
2021-01-0522915000300020.0011.247812.8787

字段说明

  • date:对应daily_stats表中利润数据所属的日期
  • total_profit:daily_stats表对应日期行的profit字段值
  • total_investment:对应日期所有投资者的投资总金额
  • user_investment:对应日期选中的目标投资者的投资总金额
  • investment_share:选中用户的投资对应的percent字段按投资金额加权后的合并值,计算公式为:
(i.amount / (SUM(i.amount) over (partition by s.date))) * i.percent

举个例子,若我统计的2名用户在目标日期范围内各有1笔投资,percent字段的合并值计算方式如下:

投资归属amountpercent
用户150020
用户220045

计算公式为:( (500 / (500 + 200) ) * 20) + ( (200 / (500 + 200) ) * 45)
也可以简化为:(20 * 500 + 45 * 200) / (500 + 200)
结合现有查询的结构,我认为第一种方式实现难度更低。我是用电子表格模拟的计算逻辑,你可以复制到各类表格工具中辅助验证。

  • user_share:选中投资者的合并投资金额占总投资金额的比例,对应可分配利润的占比,示例:(500 + 200) / 15000 = user_share = 0.046 (4.6%)
  • user_profit:最终选中用户可获得的收益,计算公式为 total_profit * investment_share * user_share

我不确定是不是存在基础数学错误,现在刚好是午餐时间,没法再归咎于疲劳了:P
我已经写了初步的测试实现,还有很多问题需要优化。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:54:00