Hive sql 每天场景题16-20
创始人
2024-05-09 07:51:49
0

16、从订单信息表(order_info)和用户信息表(user_info)中,分别统计每天男性和女性用户的订单总金额,如果当天男性或者女性没有购物,则统计结果为0

期望结果如下:

create_date

(日期)

total_amount_male

(男性用户总金额)

total_amount_female

(女性用户总金额)

2020-10-08

51950.00

24020.00

2021-09-27

29000.00

0.00

2021-09-28

70500.00

0.00

2021-09-29

43300.00

0.00

2021-09-30

860.00

0.00

2021-10-01

0.00

171680.00

2021-10-02

0.00

76150.00

2021-10-03

89880.00

5910.00

2021-10-04

9390.00

120100.00

2021-10-05

109760.00

69850.00

2021-10-06

101070.00

54300.00

2021-10-07

54700.00

129480.00

需要用到的表:

订单信息表:order_info

order_id (订单id)

user_id (用户id)

create_date (下单日期)

total_amount (订单金额)

1

101

2021-09-30

29000.00

10

103

2020-10-02

28000.00

用户信息表:user_info

user_id(用户id)

gender(性别)

birthday(生日)

101

1990-01-01

102

1991-02-01

103

1992-03-01

104

1993-04-01

代码

with t as (
select  
distinct a.create_date  
,sum(if(b.gender='男',a.total_amount ,0) ) over(partition by a.create_date,b.gender rows BETWEEN unbounded preceding and unbounded following) as total_amount_male 
,sum(if(b.gender='女',a.total_amount ,0) ) over(partition by a.create_date,b.gender rows BETWEEN unbounded preceding and unbounded following) as total_amount_female 
from order_info a 
left join user_info b on a.user_id=b.user_id
)
select 
create_date
,sum(total_amount_male) as total_amount_male
,sum(total_amount_female) as total_amount_female
from t 
group by create_date

17、查询截止每天的最近3天内的订单金额总和以及订单金额日平均值,保留两位小数,四舍五入。

期望结果如下:

create_date

(日期)

total_3d

(最近3日订单金额总和)

avg_3d

(最近3日订单金额日平均值)

2020-10-08

75970.00

75970.00

2021-09-27

104970.00

52485.00

2021-09-28

175470.00

58490.00

2021-09-29

142800.00

47600.00

2021-09-30

114660.00

38220.00

2021-10-01

215840.00

71946.67

2021-10-02

248690.00

82896.67

2021-10-03

343620.00

114540.00

2021-10-04

301430.00

100476.67

2021-10-05

404890.00

134963.33

2021-10-06

464470.00

154823.33

2021-10-07

519160.00

173053.33

需要用到的表:

订单信息表:order_info

order_id (订单id)

user_id (用户id)

create_date (下单日期)

total_amount (订单金额)

1

101

2021-09-30

29000.00

10

103

2020-10-02

28000.00

代码

select create_date
,round(sum(total_amount) over (order by datediff(create_date,'2010-01-01') range BETWEEN 2 preceding and current row ) ,2) as total_3d
,round(avg(total_amount) over (order by datediff(create_date,'2010-01-01') range BETWEEN 2 preceding and current row ),2) as avg_3d
from (
select 
create_date
,sum(total_amount) as total_amount
from order_info
group by create_date
)a

18、从订单明细表(order_detail)中查询出所有购买过商品1和商品2,但是没有购买过商品3的用户

期望结果如下:

user_id

103

105

需要用到的表:

订单信息表:order_info

order_id (订单id)

user_id (用户id)

create_date (下单日期)

total_amount (订单金额)

1

101

2021-09-30

29000.00

10

103

2020-10-02

28000.00

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

代码

-- 有没有买商品1和2
with t as (
select 
distinct a.user_id
,b.sku_id
,if(b.sku_id in('1','2'),1,0) as is_sale12
,if(b.sku_id ='3' ,1,0) as is_sale3
from order_info a 
left join order_detail b on a.order_id = b.order_id
)
-- 筛选数据
select
user_id
from 
(select user_id,sum(is_sale12) as is_sale12,sum(is_sale3) as is_sale3 from t group by user_id
)awhere is_sale12>0 and is_sale3=0

19、从订单明细表(order_detail)中统计每天商品1和商品2销量(件数)的差值(商品1销量-商品2销量)

期望结果如下:

create_date

diff

2020-10-08

-24

2021-09-27

2

2021-09-30

9

2021-10-01

-10

2021-10-02

-5800

2021-10-03

4

2021-10-04

-55

2021-10-05

-30

2021-10-06

-49

2021-10-07

-40

需要用到的表:

订单明细表: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 t as (
-- 日期 商品 销量
select 
create_date
,sku_id
,sum(if(sku_id='1',sku_num,0)) as sku_num1
,sum(if(sku_id='2',sku_num,0)) as sku_num2
from order_detail
where sku_id in('1','2')
group by 
create_date
,sku_id
)-- 日期 diff
select
create_date
,cast(sku_num1 as int) - cast(sku_num2 as int) as diff
from (
select create_date, sum(sku_num1) as sku_num1,sum(sku_num2) as sku_num2 from t
group by create_date
)a

20、从订单信息表(order_info)中查询出每个用户的最近三个下单日期的所有订单


期望结果如下:

user_id

order_id

create_date

101

2

2021-09-28

101

3

2021-09-29

101

4

2021-09-30

102

5

2021-10-01

102

6

2021-10-01

102

8

2021-10-02

103

9

2021-10-02

103

10

2021-10-02

103

12

2021-10-03

104

13

2021-10-03

104

14

2021-10-03

104

15

2021-10-03

105

17

2021-10-04

105

18

2021-10-04

105

19

2021-10-04

106

22

2021-10-05

106

23

2021-10-05

106

24

2021-10-05

107

25

2021-10-05

107

27

2021-10-06

107

28

2021-10-06

108

29

2021-10-06

108

31

2021-10-07

108

32

2021-10-07

109

33

2021-10-07

109

35

2021-10-08

109

36

2021-10-08

1010

37

2021-10-08

1010

38

2021-10-08

1010

39

2020-10-08

需要用到的表:

订单信息表:order_info

order_id (订单id)

user_id (用户id)

create_date (下单日期)

total_amount (订单金额)

1

101

2021-09-30

29000.00

10

103

2020-10-02

28000.00

代码

with t1 as (
-- 用户 订单号 日期 排序 
select 
user_id
,order_id
,create_date
,dense_rank() over (partition by user_id order by create_date desc ) as rk 
from order_info
)
select  
user_id
,order_id
,create_datefrom t1 where rk <=3 
order by user_id,order_id

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...