【HQL - 查询用户的累计消费金额及VIP等级】

该文章描述了一个SQL查询,用于从订单信息表中计算每个用户在每个下单日期的累计消费金额,并根据累计金额确定VIP等级,如普通会员、青铜会员等。查询使用了窗口函数来实现累计求和,并通过CASEWHEN语句确定VIP等级。
摘要由CSDN通过智能技术生成

水善利万物而不争,处众人之所恶,故几于道💦

题目:

从订单信息表(order_info)中统计每个用户截止其每个下单日期的累积消费金额,以及每个用户在其每个下单日期的VIP等级。

用户vip等级根据累积消费金额计算,计算规则如下:
设累积消费总额为X,
若0=<X<10000,则vip等级为普通会员
若10000<=X<30000,则vip等级为青铜会员
若30000<=X<50000,则vip等级为白银会员
若50000<=X<80000,则vip为黄金会员
若80000<=X<100000,则vip等级为白金会员
若X>=100000,则vip等级为钻石会员

在这里插入图片描述

select
  t2.user_id,
  t2.create_date,
  t2.sum_so_far,
  case
    when t2.sum_so_far >= 0 and t2.sum_so_far < 10000 then "普通会员"
    when t2.sum_so_far < 30000 then "青铜会员"
    when t2.sum_so_far < 50000 then "白银会员"
    when t2.sum_so_far < 80000 then "黄金会员"
    when t2.sum_so_far < 100000 then "白金会员"
    else "钻石会员"
  end vip_level
from
  (
    select
      t1.user_id,
      t1.create_date,
      sum(t1.sum_amount) over(partition by user_id order by create_date rows between unbounded preceding and current row) sum_so_far
    from
      (
        select
          user_id,
          create_date,
          sum(total_amount) sum_amount
        from
          order_info
        group by
          user_id,
          create_date
      ) t1
  ) t2

总结:

1.可能会出现这种情况,所以要以user_id和create_date分组,然后求sum(total_amount),计算出没人每天的总消费金额

在这里插入图片描述

2.然后求截至每个下单日期的累计下单金额sum(sum_amount),求和的范围用窗口函数限定,user_id分组,组内以create_date升序排序,然后行的范围是第一行(unbounded preceding)到当前行(current row

3.最后在外层查询中用case when分类

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿年、嗯啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值