中级练习[2]:Hive SQL数据分析与查询实战
查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。
·
目录
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;

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