sql题:求2017每个月的订单数、用户数、总成交金额

某电商公司为了统计自己的一些指标有以下需求

已知一个表订单表shopping2,有如下字段:Date_dt,Order_id,User_id,amount。
–数据样例:2017-01-01,10029028,1000003251,34。
–请给出sql进行统计:
1.给出 2017年每个月的订单数、用户数以及总成交金额。
2.给出11月的新客数(指在11月才有第一笔订单)

第一步建表

CREATE TABLE `shopping2` (
  `data_dt` varchar(30) DEFAULT NULL,
  `order_id` varchar(30) DEFAULT NULL,
  `user_id` varchar(30) DEFAULT NULL,
  `amount` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

第二步插入数据

insert into shopping2 values
('2017-01-01','10029028','1000003251',34)
,('2017-01-01','10029029','1000003251',34)
,('2017-01-01','100290288','1000003252',34)
,('2017-02-02','10029088','1000003251',34)
,('2017-02-02','100290281','1000003251',34)
,('2017-02-02','100290282','1000003253',34)
,('2017-11-02','10290282','100003253',234)
,('2017-11-01','102902810','100003253',234)
,('2018-11-02','10290284','100003243',234)

数据展示如下:
请添加图片描述

分析问题1
1.给出 2017年每个月的订单数、用户数以及总成交金额。
通过数据我们可以看到每一笔数据都会有一个订单号即使一个用户消费两次也会生成两个不一样的id,所以订单号为主键。而用户id是有重复的,问题问的是用户数,所以是去重之后的结果。
不难写出

select substr(dt,1,7) as data_dt
      ,count(order_id) as order_sum
      ,count(distinct user_id) as user_sum
      ,sum(amount) 
      from shopping2 group by 1 

结果如下:
请添加图片描述
问题2:给出11月的新客数(指在11月才有第一笔订单)

select count(1) from (
select user_id from (
select user_id,dt,row_number() over(partition by user_id order by dt) rn from shopping2 
)t1 
where rn = 1 and substr(t1.dt,6,2) = '11'
group by 1
)s 

结果如下:
结果为2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇智波天坪小梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值