HiveSQL 面试题 - 查询每天最近三天的订单总额和平均订单额

1 需求

查询截止每天的最近3天(不包含当天)的订单金额总和以及订单金额日平均值,保留两位小数,四舍五入。

  • 订单信息表 order_info
order_id (订单id)user_id (用户id)create_date (下单日期)total_amount (订单金额)
11012021-09-3029000.00
101032020-10-0228000.00
create table order_info(user_id string,
                        total_amount string,
                        create_date string,
                        order_id string) 
                        ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
101,29000.00,2021-09-27,1
101,70500.00,2021-09-28,2
101,43300.00,2021-09-29,3
101,860.00,2021-09-30,4
102,46180.00,2021-10-01,5
102,50000.00,2021-10-01,6
102,75500.00,2021-10-01,7
102,6170.00,2021-10-02,8
103,18580.00,2021-10-02,9
103,28000.00,2021-10-02,10
103,23400.00,2021-10-02,11
103,5910.00,2021-10-03,12
104,13000.00,2021-10-03,13
104,69500.00,2021-10-03,14
104,2000.00,2021-10-03,15
104,5380.00,2021-10-03,16
105,6210.00,2021-10-04,17
105,68000.00,2021-10-04,18
105,43100.00,2021-10-04,19
105,2790.00,2021-10-04,20
106,9390.00,2021-10-04,21
106,58000.00,2021-10-05,22
106,46600.00,2021-10-05,23
106,5160.00,2021-10-05,24
107,55350.00,2021-10-05,25
107,14500.00,2021-10-05,26
107,47400.00,2021-10-06,27
107,6900.00,2021-10-06,28
108,56570.00,2021-10-06,29
108,44500.00,2021-10-06,30
108,50800.00,2021-10-07,31
108,3900.00,2021-10-07,32
109,41480.00,2021-10-07,33
109,88000.00,2021-10-07,34
109,15000.00,2020-10-08,35
109,9020.00,2020-10-08,36
1010,9260.00,2020-10-08,37
1010,12000.00,2020-10-08,38
1010,23900.00,2020-10-08,39
1010,6790.00,2020-10-08,40

2 实现

  • 思路

使用开窗函数 sum()avg() 对数据进行聚合即可,注意数据的区间范围,不包含当天。

  • 实现
select create_date,
       cast(sum(sum_amount)
                over (order by create_date rows between 3 preceding and 1 preceding) as decimal(16, 2)) total_3d,
       cast(avg(sum_amount)
                over (order by create_date rows between 3 preceding and 1 preceding) as decimal(16, 2)) avg_3d
from (select create_date, sum(total_amount) sum_amount from tmp_table.tmp_skk group by create_date) t1;
+--------------+------------+------------+
| create_date  |  total_3d  |   avg_3d   |
+--------------+------------+------------+
| 2020-10-08   | NULL       | NULL       |
| 2021-09-27   | 75970.00   | 75970.00   |
| 2021-09-28   | 104970.00  | 52485.00   |
| 2021-09-29   | 175470.00  | 58490.00   |
| 2021-09-30   | 142800.00  | 47600.00   |
| 2021-10-01   | 114660.00  | 38220.00   |
| 2021-10-02   | 215840.00  | 71946.67   |
| 2021-10-03   | 248690.00  | 82896.67   |
| 2021-10-04   | 343620.00  | 114540.00  |
| 2021-10-05   | 301430.00  | 100476.67  |
| 2021-10-06   | 404890.00  | 134963.33  |
| 2021-10-07   | 464470.00  | 154823.33  |
+--------------+------------+------------+
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值