Hive综合案例练习(中级)第一题:查询累积销量排名第二的商品

一、查询累积销量排名第二的商品

题目需求

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

sku_id
2

题目解析:

  • 第一步:根据订单明细表,查询每个商品的销量情况
  • 第二步:利用dense_rank查询排名第二的商品(注:题目要求多个排名第二的商品需全部返回,因此用dense_rank)
  • 第三步:利用right join保证,没有第二名的情况下,返回null

代码实现

  • code

    set hive.strict.checks.cartesian.product=flase;
    set hive.mapred.mode=nonstrict;
    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;
    

你可能感兴趣的:(hive,hadoop,数据仓库)