期望结果如下:
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
期望结果如下:
create_date | total_3d | avg_3d |
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
期望结果如下:
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
期望结果如下:
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
期望结果如下:
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