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;