Hive sql 每天场景题23-25

23、商家要求每个商品每个月需要售卖出一定的销售总额
假设1号商品销售总额大于21000,2号商品销售总额大于10000,其余商品没有要求
请写出SQL从订单详情表中(order_detail)查询连续两个月销售总额大于等于任务总额的商品

结果如下:

sku_id

(商品id)

1

需要用到的表:

订单明细表: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

代码

with t1 as (
  --  商品 月份 任务目标 实际销售
  select
    sku_id,
    substr(create_date, 1, 7) as month,
    case
      when sku_id = '1' then 21000
      when sku_id = '2' then 10000
      else 0
    end as mubiao,
    sum(price * sku_num) as sale_all
  from
    order_detail
  group by
    sku_id,
    substr(create_date, 1, 7),
    case
      when sku_id = '1' then 21000
      when sku_id = '2' then 10000
      else 0
    end
),
t2 as (
  --  商品 月份 任务目标 实际销售 是否完成销售目标
  select
    sku_id,
    month,
    mubiao,
    sale_all,
    case
      when sale_all >= mubiao then 1
      else 0
    end as is_yes
  from
    t1
)
select
 -- 筛选数据
  distinct sku_id
from
  (
   -- 商品 月份 当月是否完成目标 下月是否完成目标  
    select
      sku_id,
      month,
      is_yes,
      lead(is_yes, 1, 0) over(
        partition by sku_id
        order by
          month
      ) as next_is_yes
    from
      t2
    where
      sku_id in(1, 2)
  ) a
where
  is_yes = 1
  and next_is_yes = 1

24、从订单详情表中(order_detail)对销售件数对商品进行分类,0-5000为冷门商品,5001-19999位一般商品,20000往上为热门商品,并求出不同类别商品的数量

结果如下:

category

(类型)

cn

(数量)

一般商品

1

冷门商品

10

热门商品

1

需要用到的表:

订单明细表: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

代码

select
-- 分类 数量 
case when cn <=5000 then '冷门商品'
    when (cn <=19999 and cn >=5001) then '一般商品'
    else '热门商品' end as category
,count(sku_id) as cn    
from  (
-- 商品 销售数 
select 
sku_id
,sum(sku_num) as cn
from order_detail
group by 
sku_id
)a
group by 
case when cn <=5000 then '冷门商品'
    when (cn <=19999 and cn >=5001) then '一般商品'
    else '热门商品' end

25 、从订单详情表中(order_detail)和商品(sku_info)中查询各个品类销售数量前三的商品。如果该品类小于三个商品,则输出所有的商品销量。

结果如下:

sku_id

(商品id)

category_id

(品类id)

2

1

4

1

1

1

8

2

7

2

5

2

12

3

11

3

10

3

需要用到的表:

订单明细表: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

商品信息表:sku_info

sku_id(商品id)

name(商品名称)

category_id(分类id)

from_date(上架日期)

price(商品价格)

1

xiaomi 10

1

2020-01-01

2000

6

洗碗机

2

2020-02-01

2000

9

自行车

3

2020-01-01

1000

代码

with t as (
select 
-- 商品 品类 销售数量 排名 
*
,rank() over(partition by category_id order by sale_all desc ) as rk
from (
select 
-- 商品 品类 销售数量
a.sku_id
,b.category_id
,sum(a.sku_num) as sale_all 
from order_detail a 
left join sku_info b on a.sku_id = b.sku_id
group by 
a.sku_id
,b.category_id
)a
)
select 
-- 筛选数据
sku_id
,category_id
from t
where rk <=3

你可能感兴趣的:(Hive场景题训练,hive,sql,数据库)