hivesql刷题40题-【1-10】

1.1查询累积销量排名第二的商品

1.1.1 题目需求

查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。期望结果如下:
在这里插入图片描述
方案一:

select nvl(sku_id, null) as sku_id
from
  (
    select  sku_id,num,dense_rank() over(order by num desc) as rank
    from
      (
        select  sku_id,sum(sku_num) as num
        from  order_detail
        group by sku_id
      ) as t1  --求出每个id的销量数
  ) as t2
 where rank = 2; --对销售进行降序排序,选择排序第二名的id

方案二:

select nvl(sku_id, null) as sku_id
from
  (
  select  sku_id,sum(sku_num) as order_num,dense_rank() over(order by sum(sku_num) desc) as rank
  from order_detail
  group by sku_id
  ) as t1
where  rank = 2; --对销售进行降序排序,选择排序第二名的id

1.2查询至少连续三天下单的用户

1.2.1 题目需求

查询订单信息表(order_info)中最少连续3天下单的用户id,期望结果如下:
在这里插入图片描述

判断是否连续,可以对日期进行排序,若日期连续,则日期-排名的数字是相同的否则是不同的
在这里插入图片描述

方案一:

select distinct user_id
from
  (
    select user_id,create_date-rank as group_num
    from
      (
        select user_id,create_date,
        row_number() over(partition by user_id order by create_date) as rank
        from
          (
            select  distinct user_id,create_date
            from ordr_info
          ) as t1 --一个用户可能在同一天有多次下单,所以需要进行去重处理
      ) as t2 
    group by user_id, group_num
    having count(*) >= 3
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值