查询每个用户第一单的消费金额
现在数据库中有一张用户交易表order,表结构为:
userid---用户IDamount--- 消费金额paytime--- 支付时间
请写出对应的SQL语句,查出每个用户第一单的消费金额。
select a.userid,a.amountfrom(select * ,rank() over(partition by userid order by paytime) as paytime_rank from order) a where paytime_rank=1;
查询每个月的新客数,当月有复购的新客数,新客当月复购率
现在数据库中有一张用户交易表order,表结构为:
userid---用户IDorderid---订单IDamount--- 消费金额paytime--- 支付时间
请写出对应的SQL语句,查出每个月的新客数(新客指在严选首次支付的用户)
-- sql1 : 获取年月,提升数据粒度select*,data_format(paytime,'%Y-%m') as ymfromorder;-- sql2 : 获取用户第一次支付的时间selectuserid,min(ym) as min_ymfromsql1group byuserid;-- sql3 : 统计每月新增人数selectcount(*)fromsql2group bymin_ym;--组合起来:selectcount(*)from(selectuserid,min(ym) as min_ymfrom(select*,data_format(paytime,'%Y-%m') as ymfromorder) t1group bytuserid) t2group bymin_ym;
请写出对应的SQL语句,当月有复购的新客数。
-- sql1 : 获取年月,提升数据粒度select*,data_format(paytime,'%Y-%m') as ymfromorder;-- sql2 : 获取第一次支付当月支付记录大于1的用户IDselectuseridfromsql1group byuserid,ymhavingym = min(ym) and count(*) > 1;-- 组合selectuseridfrom(select*,data_format(paytime,'%Y-%m') as ymfromorder) t1group byuserid,ymhavingym = min(ym) and count(*) > 1;
请写出对应的SQL语句,新客当月复购率(公式=当月有复购的新客数/月总新客数)。
第二题的查询结果除以第一题的查询结果,不多说。