计算PostgreSQL中的累进定价

时间:2017-07-07 07:08:37

标签: sql postgresql business-intelligence

我需要根据用户拥有的项目来计算收入。 例如,前10项是免费的,最多100项是0.50,最多200项是0.25,最多500项是0.15。例如。

我不知道从哪里开始,我能得到一些方向吗?

EG。如果用户有365个项目,则为(10 * 0)+(90 * 0.5)+(100 * 0.25)+(165 * 0.15)

理想情况下我会在python中做这件事,但是仪表板工具没有这个功能......

编辑: 我应该提到的是,物品的数量实际上并不是他们拥有的数量,而是他们选择的限制。限制在订阅事件中保存为单个数字。因此,对于每个用户,我将有一个表示其最大项目的整数,例如。 365

1 个答案:

答案 0 :(得分:2)

使用窗口函数row_number的第一个数字项,
然后使用案例表达式为每个项目指定适当的值 简单示例:http://sqlfiddle.com/#!17/32e4a/9

SELECT user_id,
 SUM(
    CASE
       WHEN rn <= 10 THEN 0
       WHEN rn <= 100 THEN 0.5
       WHEN rn <= 200 THEN 0.25
       WHEN rn <= 500 THEN 0.15
       ELSE 0.05
    END
   ) As revenue 
FROM (
  SELECT *,
    row_number() OVER (partition by user_id order by item_no ) As rn
  FROM mytable
) x
GROUP BY user_id
  

我应该提到物品的数量实际上并非如此   他们拥有的数字,是他们选择的限制。限制已保存   作为订阅事件中的单个数字。所以我会为每个用户   有一个整数代表他们的最大项目,例如。 365

在这种情况下,以下查询可能符合您的需求:
演示:http://sqlfiddle.com/#!17/e7a6a/2

SELECT *,
      (SELECT SUM(
          CASE
             WHEN rn <= 10 THEN 0
             WHEN rn <= 100 THEN 0.5
             WHEN rn <= 200 THEN 0.25
             WHEN rn <= 500 THEN 0.15
             ELSE 0.05
           END
            ) 
          FROM generate_series(1,t.user_limit) rn
       )
FROM mytab t;