HiveSQL 面试题 - 统计每天男性和女性用户的订单总金额

1 需求

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

  • 订单信息表 order_info
order_id (订单id)user_id (用户id)create_date (下单日期)total_amount (订单金额)
11012021-09-3029000.00
101032020-10-0228000.00
  • 用户信息表 user_info
user_id(用户id)gender(性别)birthday(生日)
1011990-01-01
1021991-02-01
1031992-03-01
1041993-04-01
  • 期望结果如下
create_date (日期)total_amount_male <decimal(16,2)> (男性用户总金额)total_amount_female <decimal(16,2)> (女性用户总金额)
2020-10-0851950.0024020.00
2021-09-2729000.000.00
2021-09-2870500.000.00
2021-09-2943300.000.00
2021-09-30860.000.00
2021-10-010.00171680.00
2021-10-020.0076150.00
2021-10-0389880.005910.00
2021-10-049390.00120100.00
2021-10-05109760.0069850.00
2021-10-06101070.0054300.00
2021-10-0754700.00129480.00

2 实现

  • 思路

使用 user_id 关联用户信息和订单信息表之后,按照订单日期 create_date 进行分组,并且使用 sum(if()) 分别对男性和女性的购物金额进行聚合即可得到结果。

重点考察 sum(if()) 函数的结合使用。

  • 实现
SELECT
  create_date,
  sum(if (gender = '男', total_amount, 0)) total_amount_male,
  sum(if (gender = '女', total_amount, 0)) total_amount_female
from
  user_info ui
  inner join order_info oi on ui.user_id = oi.user_id
GROUP BY
  create_date;
create_datetotal_amount_maletotal_amount_female
2020-10-0851950.0024020.00
2021-09-2729000.000.00
2021-09-2870500.000.00
2021-09-2943300.000.00
2021-09-30860.000.00
2021-10-010.00171680.00
2021-10-020.0076150.00
2021-10-0389880.005910.00
2021-10-049390.00120100.00
2021-10-05109760.0069850.00
2021-10-06101070.0054300.00
2021-10-0754700.00129480.00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值