4.查询用户的累计消费金额及VIP等级(开窗函数的使用)

在这里插入图片描述
在这里插入图片描述
思路分析:
(1)按照user_id及create_date 分组求消费金额total_amount
(2)开窗计算同user_id下的累计销售金额sum(total_amount) over(partition by user_id order by create_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as sum_so_far
(3)根据sum_so_far的值写case when语句判断会员等级
注:关键点在于:ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
这段代码,它的含义是开窗范围是从起始行到当前行,一般用于从起始行到当前行的累计值计算场景

代码实现:

select 
    user_id,
    create_date,
    sum_so_far,
    case
        when sum_so_far >= 0
        and sum_so_far < 10000 then '普通会员'
        when sum_so_far >= 10000
        and sum_so_far < 30000 then '青铜会员'
        when sum_so_far >= 30000
        and sum_so_far < 50000 then '白银会员'
        when sum_so_far >= 50000
        and sum_so_far < 80000 then '黄金会员'
        when sum_so_far >= 80000
        and sum_so_far < 100000 then '白金会员'
        when sum_so_far >= 100000 then '钻石会员'
        else null
    end as vip_level
from (
        SELECT 
            user_id,
            create_date,
            sum(total_amount) over( partition by user_id order by create_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as sum_so_far
        from (
                select 
                    user_id,
                    create_date,
                    sum(total_amount) total_amount
                from order_info
                group by user_id,
                    create_date
            ) t0
    ) t1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值