本文主要是介绍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
这篇关于sql题:求2017每个月的订单数、用户数、总成交金额的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!