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

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...