查询每个用户第一单的消费金额

现在数据库中有一张用户交易表order,表结构为:

userid	---	用户ID
amount	--- 消费金额
paytime	--- 支付时间

请写出对应的SQL语句,查出每个用户第一单的消费金额。

select 
    a.userid,
    a.amount
from
    (select 
        * ,
        rank() over(partition by userid order by paytime) as paytime_rank 
    from 
        order
    ) a 
where 
    paytime_rank=1;

查询每个月的新客数,当月有复购的新客数,新客当月复购率

现在数据库中有一张用户交易表order,表结构为:

userid	---	用户ID
orderid	---	订单ID
amount	--- 消费金额
paytime	--- 支付时间

请写出对应的SQL语句,查出每个月的新客数(新客指在严选首次支付的用户)

-- sql1  :  获取年月,提升数据粒度
select
    *,
    data_format(paytime,'%Y-%m') as ym
from
    order
;
 
-- sql2  :  获取用户第一次支付的时间

select
    userid,
    min(ym) as min_ym
from
    sql1
group by
    userid;

-- sql3  :  统计每月新增人数
select
    count(*)
from
    sql2
group by
    min_ym;
     
--组合起来:
select
    count(*)
from
    (
    select
        userid,
        min(ym) as min_ym
    from
        (
        select
            *,
            data_format(paytime,'%Y-%m') as ym
        from
            order
        ) t1
    group by
        tuserid
    ) t2
group by
    min_ym;

请写出对应的SQL语句,当月有复购的新客数。

-- sql1  :  获取年月,提升数据粒度
select
    *,
    data_format(paytime,'%Y-%m') as ym
from
    order
;
 
-- sql2  :  获取第一次支付当月支付记录大于1的用户ID

select
    userid
from
    sql1
group by
    userid,
    ym
having
    ym = min(ym) and count(*) > 1
;


-- 组合
select
    userid
from
    (
    select
        *,
        data_format(paytime,'%Y-%m') as ym
    from
        order
	) t1
group by
    userid,
    ym
having
    ym = min(ym) and count(*) > 1
;

请写出对应的SQL语句,新客当月复购率(公式=当月有复购的新客数/月总新客数)。

第二题的查询结果除以第一题的查询结果,不多说。
Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐