排名

用户解题统计

过去一年提交了

勋章 ①金银铜:在竞赛中获得第一二三名;②好习惯:自然月10天提交;③里程碑:解决1/2/5/10/20/50/100/200题;④每周打卡挑战:完成每周5题,每年1月1日清零。

收藏

评论笔记

评论日期 题目名称 评论内容 站长评论
2024-11-30 10月1日后再也没活跃过的用户 
题目描述和代码的实现,10-01所属区间不一致呀
注意开闭区间
2024-11-29 小宇宙电台的同期群分析 
with data1 as (
    select distinct usr_id,
                    date(login_time) as login_date
    from user_login_log
),
     data2 as (
         select usr_id,
                login_date,
                first_value(login_date) over (partition by usr_id order by login_date) as `start_date`,
                lag(login_date) over (partition by usr_id order by login_date) as `pre_date`
         from data1
     ),
     data3 as (
         select  distinct data1.usr_id,
                         data1.login_date,
                         case
                             when pre_date is null and datediff(data1.login_date,start_date) = 0 then 'flag-1'
                             when pre_date is not null and datediff(data1.login_date,pre_date) <= 3 then 'flag-2'
                             else 'flag-3'
                         end as flag
         from data1
                left join data2
                            on (data1.usr_id,data1.login_date) = (data2.usr_id,data2.login_date)
     ),
     data4 as (
         select login_date,
                round((sum(if(flag = 'flag-1', 1, 0)) / count(1)) * 100, 2) as rate_flag_1,
                round((sum(if(flag = 'flag-2', 1, 0)) / count(1)) * 100, 2) as rate_flag_2,
                round((sum(if(flag = 'flag-3', 1, 0)) / count(1)) * 100, 2) as rate_flag_3
         from data3
         group by login_date
     )
select login_date,
       concat_ws(',', rate_flag_1, rate_flag_2, rate_flag_3) as pct
from data4
where year(login_date) = '2024'
group by login_date
order by login_date;
求指点这个思路的错误呀,一直是0过不去
啥也没说
2024-11-29 小结(2)越花越多是死罪,按月统计Substr 
除了把条件二和条件一分开列出来,还有什么坑点呀,汗流浃背了
看了下你代码,感觉逻辑乱了啊哈哈哈
2024-11-29 小结(1)大数据早就能扫黄,找足证据不慌张 
交了十几次,最后发现是字段名不对
哈哈 好多人反应这个问题,现在已经修正了。不需要严格对应字段名

提交记录

提交日期 题目名称 提交代码
2025-02-24 超过3个标签的视频 
SELECT 
    video_id, 
    title, 
    author_id,
    tag
FROM 
    ks_video_inf 
WHERE 
    LENGTH(tag) - LENGTH(REPLACE(tag, ' ', '')) + 1 > 3;
2025-02-24 快手面试真题(3)同时在线人数峰值时点 
with a as(
select
	live_id,
	`enter_time` as action_time,
	1 as flag
from ks_live_t1
union all
select
	live_id,
	leave_time as action_time,
	-1 as flag
from ks_live_t1
),
b as (
select
	live_id,
	action_time,
	sum(flag) over(partition by live_id order by action_time) as prelive_pretime_cnt
from a
),
c as(
select
	live_id,
	action_time,
	prelive_pretime_cnt,
	max(prelive_pretime_cnt)over(partition by live_id) as target
from b
),
d as (
select
live_id,
target as max_online_users,
min(action_time) as first_peak_time,
max(action_time) as last_peak_time
from c
where prelive_pretime_cnt = target
group by live_id,target
)
select
	d.live_id,
ks_live_t2.live_nm,
max_online_users,
first_peak_time,
last_peak_time
from d
left join ks_live_t2 on d.live_id = ks_live_t2.live_id;
2025-02-24 快手面试真题(2)同时在线人数峰值 
WITH UserActivity AS (
    SELECT 
        t1.usr_id,
        t1.live_id,
        t1.enter_time AS event_time,
        1 AS act
    FROM 
        ks_live_t1 t1
    UNION ALL
    SELECT 
        t1.usr_id,
        t1.live_id,
        t1.leave_time AS event_time,
        -1 AS act
    FROM 
        ks_live_t1 t1
),
CumulativeOnline AS (
    SELECT 
        live_id,
        event_time,
        SUM(act) OVER (PARTITION BY live_id ORDER BY event_time) AS online_users
    FROM 
        UserActivity
),
PeakOnline AS (
    SELECT 
        live_id,
        event_time,
        online_users,
        MAX(online_users) OVER (PARTITION BY live_id) AS max_online_users
    FROM 
        CumulativeOnline
),
PeakTimes AS (
    SELECT 
        live_id,
        event_time AS peak_time,
        max_online_users
    FROM 
        PeakOnline
    WHERE 
        online_users = max_online_users
)
SELECT 
    pt.live_id,
    t2.live_nm,
    pt.max_online_users
FROM 
    PeakTimes pt
JOIN 
    ks_live_t2 t2
ON 
    pt.live_id = t2.live_id
GROUP BY
    pt.live_id,
    t2.live_nm,
    pt.max_online_users
ORDER BY 
    pt.max_online_users DESC;
2025-02-23 分类别的最火直播间 
with a as (
select 
	ks_live_t1.live_id,
 	ks_live_t2.live_nm,
	ks_live_t2.live_type,
	count(*) as enter_cnt,
	row_number()over(partition by ks_live_t2.live_type order by count(*) desc) as rn
from ks_live_t1
left join ks_live_t2 on ks_live_t1.live_id = ks_live_t2.live_id
where date_format(ks_live_t1.enter_time,'%Y-%m-%d %H') = '2021-09-12 23'
group by ks_live_t1.live_id,ks_live_t2.live_nm,ks_live_t2.live_type
)
select
	live_id,
live_nm,
live_type,
enter_cnt
from a
where rn=1
order by live_id;
2025-02-23 快手面试真题(1)同时在线人数 
with a as(
select 
	ks_live_t1.live_id,
	ks_live_t1.usr_id
from ks_live_t1 
where enter_time <= '2021-9-12 23:48:38' and leave_time >= '2021-9-12 23:48:38'
)
select
	a.live_id,
ks_live_t2.live_nm,
count(distinct a.usr_id) as online_users
from a
left join ks_live_t2
on a.live_id = ks_live_t2.live_id
group bya.live_id,ks_live_t2.live_nm
order by online_users desc,live_id;
2025-02-23 快手面试真题(1)同时在线人数 
with a as(
select 
	ks_live_t1.live_id,
	ks_live_t1.usr_id
from ks_live_t1 
where enter_time < '2021-9-12 23:48:39' and leave_time > '2021-9-12 23:48:39'
)
select
	a.live_id,
ks_live_t2.live_nm,
count(distinct a.usr_id) as online_users
from a
left join ks_live_t2
on a.live_id = ks_live_t2.live_id
group bya.live_id,ks_live_t2.live_nm
order by online_users desc,live_id;
2025-02-23 快手面试真题(1)同时在线人数 
with a as(
select 
	ks_live_t1.live_id,
	ks_live_t1.usr_id
from ks_live_t1 
where enter_time <= '2021-9-12 23:48:39' and leave_time >= '2021-9-12 23:48:39'
)
select
	a.live_id,
ks_live_t2.live_nm,
count(distinct a.usr_id) as online_users
from a
left join ks_live_t2
on a.live_id = ks_live_t2.live_id
group bya.live_id,ks_live_t2.live_nm
order by online_users desc,live_id;
2025-02-22 各商品漏斗转化率 
select 
	c.prd_id,
c.prd_nm,
sum(if(if_snd=1,1,0)) as exposure_count,
sum(if(if_vw=1,1,0 )) as view_count,
sum(if(if_cart=1,1,0)) as cart_count,
sum(if(if_buy=1,1,0)) as buy_count,
round(avg(if(if_vw=1,1,0 ))*100,2) as view_rate,
round(avg(if(if_cart=1,1,0))*100,2) as cart_rate,
round(avg(if(if_buy=1,1,0))*100,2) as buy_rate
from tb_pg_act_rcd a
left join tb_cst_bas_inf b on a.cust_uid = b.cust_uid
left join tb_prd_map c on a.prd_id = c.prd_id
group by c.prd_id,c.prd_nm;
2025-02-22 统计每个城市各状态的单量(行转列) 
select
	cty,
sum(case status when 'completed' then 1 else 0 end) as completed_orders,
sum(case status when 'cancel_by_usr' then 1 else 0 end ) as cancelled_by_usr_orders,
sum(case status when 'cancel_by_driver' then 1 else 0 end) as cancelled_by_driver_orders
from hll_t1
left join hll_t2 on hll_t1.driver_id = hll_t2.usr_id
where hll_t2.role = 'driver'
group by cty;
2025-02-22 统计每个城市各状态的单量(行转列) 
select
	cty,
sum(case status when 'completed' then 1 else 0 end) as completed_orders,
sum(case status when 'cancel_by_usr' then 1 else 0 end ) as cancelled_by_usr_orders,
sum(case status when 'cancel_by_driver' then 1 else 0 end) as cancelled_by_driver_orders
from hll_t1
group by cty;
2025-02-22 统计每个城市各状态的单量(行转列) 
select
	cty,
sum(case status when 'completed' then 1 else 0 end) as completed_orders,
sum(case status when 'cancel_by_usr' then 1 else 0 end ) as cancelled_by_usr_orders,
sum(case status when 'cancelled_by_driver' then 1 else 0 end) as cancelled_by_driver_orders
from hll_t1
left join hll_t2 on hll_t1.driver_id = hll_t2.usr_id
where hll_t2.role = 'driver'
group by cty;
2025-02-22 统计每个城市各状态的单量(行转列) 
select
	cty,
sum(case status when 'completed' then 1 else 0 end) as completed_orders,
sum(case status when 'cancel_by_usr' then 1 else 0 end ) as cancelled_by_usr_orders,
sum(case status when 'cancelled_by_driver' then 1 else 0 end) as cancelled_by_driver_orders
from hll_t1
group by cty;
2025-02-22 统计每个城市各状态的单量(行转列) 
select
	cty,
sum(case status when 'completed' then 1 else 0 end) as completed_orders,
sum(case status when 'cancel_by_usr' then 1 else 0 end ) as cancelled_by_usr_orders,
sum(case status when 'cancelled_by_driver_orders' then 1 else 0 end) as cancelled_by_driver_orders
from hll_t1
left join hll_t2 on hll_t1.driver_id = hll_t2.usr_id
where hll_t2.role = 'driver' 
group by cty
order by cty;
2025-02-22 统计每个城市各状态的单量(行转列) 
select
	cty,
sum(case status when 'completed' then 1 else 0 end) as completed_orders,
sum(case status when 'cancel_by_usr' then 1 else 0 end ) as cancelled_by_usr_orders,
sum(case status when 'cancelled_by_driver_orders' then 1 else 0 end) as cancelled_by_driver_orders
from hll_t1
left join hll_t2 on hll_t1.driver_id = hll_t2.usr_id
where hll_t2.role = 'driver' 
group by cty;
2025-02-22 统计每个城市各状态的单量(行转列) 
select
	cty,
sum(case status when 'completed' then 1 else 0 end) as completed_orders,
sum(case status when 'cancel_by_usr' then 1 else 0 end ) as cancelled_by_usr_orders,
sum(case status when 'cancelled_by_driver_orders' then 1 else 0 end) as cancelled_by_driver_orders
from hll_t1
group by cty;
2025-02-21 给商品打四类标签(列) 
SELECT 
    gd.gd_id, 
    gd.gd_nm, 
    gd.gd_typ,
    MAX(CASE WHEN fav.mch_id IS NOT NULL AND pchs.mch_id IS NOT NULL THEN 1 ELSE 0 END) AS both_collected_and_purchased,
    MAX(CASE WHEN fav.mch_id IS NOT NULL AND pchs.mch_id IS NULL THEN 1 ELSE 0 END) AS only_collected_not_purchased,
    MAX(CASE WHEN fav.mch_id IS NULL AND pchs.mch_id IS NOT NULL THEN 1 ELSE 0 END) AS only_purchased_not_collected,
    MAX(CASE WHEN fav.mch_id IS NULL AND pchs.mch_id IS NULL THEN 1 ELSE 0 END) AS neither_collected_nor_purchased,
    COUNT(pchs.mch_id) AS purchase_count
FROM 
    gd_inf gd
LEFT JOIN 
    (SELECT DISTINCT mch_id FROM xhs_fav_rcd) fav ON gd.gd_id = fav.mch_id
LEFT JOIN 
    xhs_pchs_rcd pchs ON gd.gd_id = pchs.mch_id
GROUP BY 
    gd.gd_id, gd.gd_nm, gd.gd_typ
ORDER BY 
    purchase_count DESC;
2025-02-21 给商品打四类标签(行) 
select 
	gd.gd_id,
gd.gd_nm,
gd.gd_typ,
case 
	when fav.mch_id is null and pchs.mch_id is null then '不收藏不购买'
when fav.mch_id is not null and pchs.mch_id is null then '收藏不购买'
when fav.mch_id is null and pchs.mch_id is not null then '购买不收藏'
else '收藏且购买'
end as category
from gd_inf as gd
left join (select distinct mch_id from xhs_fav_rcd) fav on gd.gd_id = fav.mch_id
left join (select distinct mch_id from xhs_pchs_rcd) pchs on gd.gd_id = pchs.mch_id
order by gd.gd_id;
2025-02-21 一线城市历年平均气温 
select 
	year(dt) as Y,
cast(avg(case when city='beijing' then tmp_h else null end) as decimal(4,2)) as '北京',
cast(avg(case when city='shanghai' then tmp_h else null end) as decimal(4,2)) as '上海',
cast(avg(case when city='shenzhen' then tmp_h else null end) as decimal(4,2)) as '深圳',
cast(avg(case when city='guangzhou' then tmp_h else null end) as decimal(4,2)) as '广州'
from weather_rcd_china
where year(dt) between '2011' and '2022'
group by year(dt)
2025-02-20 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH data1 AS (
    SELECT
        usr_id,
        DATE(login_time) AS login_date
    FROM
        user_login_log
    WHERE
        login_time >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
    GROUP BY
        usr_id,
        DATE(login_time)
),
data2 as(
select
	a.usr_id,
	a.login_date as first_date,
	b.login_date as next_date,
	datediff(b.login_date,a.login_date) as diff
from data1 a
left join data1 b
on a.usr_id = b.usr_id and b.login_date between date_add(a.login_date,interval 1 day) and date_add(a.login_date,interval 14 day)
)
select
	first_date as first_login_date,
round(count(distinct case when diff between 1 and 3 then usr_id end)*100 / count(distinct usr_id),2) as t_plus_3_retention_rate,
round(count(distinct case when diff between 1 and 7 then usr_id end)*100 / count(distinct usr_id),2) as t_plus_7_retention_rate,
round(count(distinct case when diff between 1 and 14 then usr_id end)*100 / count(distinct usr_id),2) as t_plus_14_retention_rate
from data2
group by first_date
order by first_date;
2025-02-20 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH data1 AS (
    SELECT
        usr_id,
        DATE(login_time) AS login_date
    FROM
        user_login_log
    WHERE
        login_time >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
    GROUP BY
        usr_id,
        DATE(login_time)
),
data2 as(
select
	a.usr_id,
	a.login_date as first_date,
	b.login_date as next_date,
	datediff(a.login_date,b.login_date) as diff
from data1 a
left join data1 b
on a.usr_id = b.usr_id and b.login_date between date_add(a.login_date,interval 1 day) and date_add(a.login_date,interval 14 day)
)
select
	first_date as first_login_date,
round(count(distinct case when diff between 1 and 3 then usr_id end)*100 / count(distinct usr_id),2) as t_plus_3_retention_rate,
round(count(distinct case when diff between 1 and 7 then usr_id end)*100 / count(distinct usr_id),2) as t_plus_7_retention_rate,
round(count(distinct case when diff between 1 and 14 then usr_id end)*100 / count(distinct usr_id),2) as t_plus_14_retention_rate
from data2
group by first_date
order by first_date;