1 需求
从订单信息表(order_info)和用户信息表(user_info)中,分别统计每天男性和女性用户的订单总金额,如果当天男性或者女性没有购物,则统计结果为 0。
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_id(用户id) | gender(性别) | birthday(生日) |
---|
101 | 男 | 1990-01-01 |
102 | 女 | 1991-02-01 |
103 | 女 | 1992-03-01 |
104 | 男 | 1993-04-01 |
create_date (日期) | total_amount_male <decimal(16,2)> (男性用户总金额) | total_amount_female <decimal(16,2)> (女性用户总金额) |
---|
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 |
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_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 |