hivesql练习(1)分组,聚合,累加,join,打标记,多行转多列

给定订单表 sale_order

idsale_dtuser_idsku_idsale_countpriceamount
12019-01-01110012100200
22019-01-02210011100100
32019-02-1031001280160
42019-02-11210022100200
52019-03-01310021100100
62019-03-013100115050
72019-03-02310034100400

问题1,根据订单表 sale_order生成如下数据,请写出sql, 最好是hive支持的

月份销量销售额
2019-013300
2019-024360
2019-036550

计算:

select
substr(sale_dt,1,7) as `月份`,
sum(sale_count) as `销量`,
sum(amount) as `销售额`
from sale_order
group by substr(sale_dt,1,7)
;

问题2, 根据订单表 sale_order生成如下数据,请写出sql, 最好是hive支持的

user_id2019_012019_022019_03
120000
21002000
30160550

计算:

with tmp as(
select
user_id,
substr(sale_dt,1,7) as dt,
sum(amount) as am
from sale_order
group by user_id,substr(sale_dt,1,7)
)

select
user_id,
max(`2019_01`) as `2019_01`,
max(`2019_02`) as `2019_02`,
max(`2019_03`) as `2019_03`
from
(
select
user_id,
case when dt='2019-01' then am else 0 end as `2019_01`,
case when dt='2019-02' then am else 0 end as `2019_02`,
case when dt='2019-03' then am else 0 end as `2019_03`
from tmp
) t
group by user_id;

问题3,根据订单表 sale_order生成如下数据,请写出sql, 最好是hive支持的

月份累计销量累计销售额
2019-013300
2019-027660
2019-03131210

计算:

with tmp as(
select
substr(sale_dt,1,7) as dt,
sum(sale_count) as sum_cnts,
sum(amount) as sum_amt
from sale_order
group by substr(sale_dt,1,7)
)

select
dt as `月份`,
sum(sum_cnts) over(order by dt rows between unbounded preceding and current row) as `累计销量`,
sum(sum_amt) over(order by dt rows between unbounded preceding and current row) as `累计销售额`
from tmp
;

问题4, 另有商品表products如下,请问题,请给出累计销售量和累计销售额排名,并写出sql。

sku_idsku_name
1001商品1
1002商品2
1003商品3

计算:(感觉需求不完整,我个人理解是求每个月每个商品的销售量排名,销售额排名,并且每个月每个商品的销售量和销售额是累加的)

with tmp as(
select
substr(sale_dt,1,7) as dt,
sku_name,
sum(sale_count) as sum_cnts,
sum(amount) as sum_amt
from sale_order
join products on sale_order.sku_id=products.sku_id
group by substr(sale_dt,1,7),sku_name
)

select
dt,
sku_name,
row_number() over(partition by dt order by `累计销售量` desc) as `累计销售量排名`,
row_number() over(partition by dt order by `累计销售额` desc) as `累计销售额排名`
from
(
select
dt,
sku_name,
sum(sum_cnts) over(partition by sku_name order by dt rows between unbounded preceding and current row) as `累计销售量`,
sum(sum_amt) over(partition by sku_name order by dt rows between unbounded preceding and current row) as `累计销售额`
from tmp
) t
;

问题5,根据如上数据,请写出一些结论性的观点。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值