大数据SQL经典面试题系列(3) -网易严选/考拉数据分析SQL题

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

现在数据库中有一张用户交易表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语句,新客当月复购率(公式=当月有复购的新客数/月总新客数)。

第二题的查询结果除以第一题的查询结果,不多说。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寒 暄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值