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 @   晓枫的春天  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示