目录

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

 题目需求

代码实现

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

题目需求

 代码实现

3. 查询各品类销售商品的种类数及销量最高的商品

 题目需求

 代码实现


 1. 查询累积销量排名第二的商品
 题目需求

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

sku_id
11
代码实现
hive>
select sku_id
from (
         select sku_id
         from (
                  select sku_id,
                         order_num,
                         dense_rank() over (order by order_num desc) rk
                  from (
                           select sku_id,
                                  sum(sku_num) order_num
                           from order_detail
                           group by sku_id
                       ) t1
              ) t2
         where rk = 2
     ) t3
         right join --为保证,没有第二名的情况下,返回null
     (
         select 1
     ) t4
     on 1 = 1;
2. 查询至少连续三天下单的用户
题目需求

查询订单信息表(order_info)中最少连续3天下单的用户id,期望结果如下:

user_id
101
 代码实现
hive>
select distinct user_id
from (
         select user_id
         from (
                  select user_id
                       , create_date
                       , date_sub(create_date, row_number() over (partition by user_id order by create_date)) flag
                  from (
                           select user_id
                                , create_date
                           from order_info
                           group by user_id, create_date
                       ) t1 -- 同一天可能多个用户下单,进行去重
              ) t2 -- 判断一串日期是否连续:若连续,用这个日期减去它的排名,会得到一个相同的结果
         group by user_id, flag
         having count(flag) >= 3 -- 连续下单大于等于三天
     ) t3;
3. 查询各品类销售商品的种类数及销量最高的商品
 题目需求

从订单明细表(order_detail)统计各品类销售出的商品种类数及累积销量最好的商品,期望结果如下:

category_id category_name sku_id name order_num order_cnt
1 数码 2 手机壳 302 4
2 厨卫 8 微波炉 253 4
3 户外 12 遮阳伞 349 4
 代码实现
hive>
select category_id,
       category_name,
       sku_id,
       name,
       order_num,
       sku_cnt
from (
         select od.sku_id,
                sku.name,
                sku.category_id,
                cate.category_name,
                order_num,
                rank() over (partition by sku.category_id order by order_num desc) rk,
                count(distinct od.sku_id) over (partition by sku.category_id)      sku_cnt
         from (
                  select sku_id,
                         sum(sku_num) order_num
                  from order_detail
                  group by sku_id
              ) od
                  left join
              sku_info sku
              on od.sku_id = sku.sku_id
                  left join
              category_info cate
              on sku.category_id = cate.category_id
     ) t1
where rk = 1;
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐