Hive 刷题之Top2

需求描述

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

 订单明细表:order_detail

order_detail_id
(订单明细id)
order_id
(订单id)
sku_id
(商品id)
create_date
(下单日期)
price
(商品单价)
sku_num
(商品件数)
1 1 1 2021-09-30 2000.00 2
2 1 3 2021-09-30 5000.00 5
22 10 4 2020-10-02 6000.00 1
23 10 5 2020-10-02 500.00 24
24 10 6 2020-10-02 2000.00 5

解题思路

这个题目主要考察的是 排序函数的用法

rank:等值后留空位
dense_rank 等值后不留空位
row_number 直接排序

这个题目采用 rank 或者 dense_rank 都可以实现;

参考SQL

select sku_id
from (select sku_id, drank() over (order by sku_num desc) rn
      from (select sku_id, sum(sku_num) sku_num
            from order_detail
            group by sku_id) t) t
where rn = 2;


select sku_id
from (select sku_id, dense_rank() over    (order by sku_num desc) rn
      from (select sku_id, sum(sku_num) sku_num
            from order_detail
            group by sku_id) t) t
where rn = 2;

 

posted @ 2023-01-03 18:21  晓枫的春天  阅读(43)  评论(0编辑  收藏  举报