Hive sql 常见面试题-复购率问题

现有电商订单表(order_detail)如下。

在这里插入图片描述

注:复购率指用户在一段时间内对某商品的重复购买比例,复购率越大,则反映出消费者对品牌的忠诚度就越高,也叫回头率

此处我们定义:某商品复购率 = 近90天内购买它至少两次的人数 ÷ 购买它的总人数

近90天指包含最大日期(以订单详情表(order_detail)中最后的日期)在内的近90天。结果中复购率保留2位小数,并按复购率倒序、商品ID升序排序。

期望结果如下:

在这里插入图片描述
查询sql

with
  t as (
    SELECT DISTINCT
      user_id,
      product_id,
      count(user_id) over (
        PARTITION BY
          user_id,
          product_id
      ) cn
    FROM
      (
        SELECT
          user_id,
          product_id,
          order_date,
          max(order_date) over (
            ORDER BY
              1
          ) max_od
        FROM
          order_detail
      ) t1
    WHERE
      order_date >= date_sub (max_od, 90)
  )
SELECT
  product_id,
  cast(sum(num) / count(user_id) as DECIMAL(16, 2)) cpr
FROM
  (
    SELECT
      user_id,
      product_id,
      IF (cn = 2, 1, 0) num
    FROM
      t
  ) t1
GROUP BY
  product_id
order by
  cpr desc
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值