排名

用户解题统计

过去一年提交了

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

收藏

评论笔记

评论日期 题目名称 评论内容 站长评论
2025-02-14 一元一次函数形成的等腰三角形 
c如果是0了,那就是一个点啊。
select
	*
from
	numbers_for_fun
where
	a=0
    and c!=0
    and (b=1 or b=-1)
order by	
	id
啥也没说
2025-02-13 窗口函数(4)越来越喜欢召妓,窗口函数用累计(2) 
我其实不是特别理解有两个点:
1、我这个代码输出的结果里面,第一行是null。但是我临时表1是输出的不同的2023月份,第二章合并表用的inner join,第三个临时表只是新增一列,应该不会出现null值
2、我第一个表中distinct 月份,然后第三章表进行左连接,4月份还掉了?按理来说date_table应该是完整的月份呀,不会出现这么大的误差的。
with date_summary as (
	select	
  		distinct date_format(date_value,'%Y-%m') as trx_mon
  	from
  		date_table
  	where	
  		year(date_value)=2023
),
monthly_sum_trx_amt as (
	select	
  		substr(trx_time,1,7) as trx_mon
  		,sum(trx_amt) as month_trx_amt
  	from
  		cmb_usr_trx_rcd as u
  		inner join
  		cmb_mch_typ as m
  		using (mch_nm)
  	where
  		usr_id=5201314520
 		and mch_typ='休闲娱乐'
  		and year(trx_time)=2023
  	group by
  		substr(trx_time,1,7)
),
total_sum_trx_amt as (
	select
  		m1.trx_mon
  		,coalesce(month_trx_amt,0) as month_trx_amt
  		,sum(month_trx_amt)over(order by m1.trx_mon ) as trx_amt
  	from
  		date_summary as d1
  		left join
  		monthly_sum_trx_amt as m1
  		on d1.trx_mon=m1.trx_mon
)

select
	trx_mon
    ,trx_amt
from
	total_sum_trx_amt
order by
	trx_mon
如电话沟通,只需改动两个字母即可通过运行。
同学你表链接没学好,罚你重写5道left join的题。
2025-02-11 数学成绩分段统计(1) 
with math_rank as (
select
	student_id
    ,case when
    	score>=110 then '[110, 120]'
        when 
        	score between 90 and 109 then '[90, 110)'
        when
        	score between 60 and 89 then '[60, 90)'
  		else '[0, 60)'
        end as score_range
from
	scores
where	
	exam_date='2024-06-30'
    and subject='数学')

select
	score_range
    ,count(*) as num_students
from
	math_rank
group by
	score_range
这个地方我输出的结果也是一样的,但是跟他排序不同。我想知道在这种情况下需要怎么排序,才能排成答案这种。
加ORDER BY score_range DESC就好啦
2025-02-11 HAVING-语数英优异的学生 
我一开始以为要算所有科目的总分
先看需求,胸有成表;没有成表再看输出示例~
2025-02-10 条件过滤-符合条件的班主任 
select	
	name
    ,subject
    ,class_code
    ,qualification
from
	teachers
where
	fir_degr rlike '北京大学|清华大学'
	and head_teacher is not null
order by
	name asc
我用正则表达式进行匹配为什么不对
复制你的代码,试了可以通过呀。|、| 是不是把竖线输入错啦
2025-02-10 化学老师的教学成果 
我不太懂这个去重标准,比如姜建华,他考了四次,都没及格,然后我把他归为不及格,但如果有一个人四次考试及格一次,那我是算作及格还是不及格
这里的标准是:凡是有过不及格记录的,都算作不及格。
2025-02-10 S1年级物理成绩前10名(1) 
select
	st.student_id
    ,st.name
    ,sc.score
    ,row_number()over(order by sc.score desc) as rnk
from
	students as st
    inner join 
    scores	as sc
    on st.student_id=sc.student_id
where
	st.grade_code='S1'
    and sc.subject='物理'
ORDER BY 
    rnk,st.student_id
limit
	10
就我这个也能输出排名前十,但是跟答案不一样,我筛选的条件也是s1学物理的
纯按分数来,前十名有很多个。邱博、蔡帆、张海燕、黃兵都是97分。

这道题用来启发思考的,如果想把分数排前10名(不管是12个同学还是15个同学)所有同学都找出来,应该用什么排序排序窗口函数、是否要用limit
2025-02-10 大结局(😊)渣男9月爽翻天,罪证送他去西天 
上一题中代码里面用的count计数,然后在临时表里没有group by,后面调用的时候进行分组。但是我在这个题中我在第二个计算各个类型频次表里,用count代替sum计数,然后我对日期和这几个count分组,输出不了结果,我不太明白为什么。
with quarterly_transactions as (
    select
        *,
        concat(year(trx_time), '-', 'Q', quarter(trx_time)) as trx_quarter, /* 提取交易日期的年份和季度 */
        count(case when trx_amt = 288 then trx_amt else null end) over (order by concat(year(trx_time), '-', 'Q', quarter(trx_time))) as withhand, /* 计算金额为 288 的交易次数,并按季度累积 */
        count(case when trx_amt = 888 then trx_amt else null end) over (order by concat(year(trx_time), '-', 'Q', quarter(trx_time))) as doi /* 计算金额为 888 的交易次数,并按季度累积 */
    from
        cmb_usr_trx_rcd
    where
        usr_id = 5201314520 /* 限制查询结果只包含特定用户的交易记录 */ and mch_nm='红玫瑰按摩保健休闲'
and year(trx_time) in (2023,2024)
)
select
    trx_quarter,
    withhand,
    doi
from
    quarterly_transactions
group by
    trx_quarter,
    withhand,
    doi /* 按季度分组,并选择累积的交易次数 */
order by
    trx_quarter; /* 按季度排序 */
sum case when 和count case when绝大多数情况下都是可以等价互换的,你再试试是不是其他条件漏写啦
2025-02-06 十大恩客你排第一,给钱金主数你多 
在2022-2023两年期间,谁在红浪漫消费的金额最多?

输出客户id、总金额,取前5行。
题目要的跟代码给的不一样啊
改了改了😁
2025-02-03 时间日期(1)按月统计日花费,一天都不要浪费 
select
	substr(DATE_FORMAT(trx_time, '%Y-%m-%d'),1,7) as trx_mon
    ,max(last_day(trx_time)) as last_day
from
	cmb_usr_trx_rcd
where
	year(trx_time) in (2023,2024)
group by
	substr(DATE_FORMAT(trx_time, '%Y-%m-%d'),1,7)
order by
	trx_mon
我想问一个语法方面的问题,就是有了group分组之后,是不是输出的列也是要聚合好的。我一开始lastday那里没有加max,就是无法输出。
select a,b from t group by a会报错的;select a, max(b) from t group by a不会报错。你的语句不加max,就是犯了第一种错
2025-01-31 输出特定日期上市的银行 
select
	*
from
	stock_info
where 
	 (list_date between '2026-06-01' and '2006-09-01')
     and industry ='银行'
     and area='北京'
order by
	list_date
不懂为啥没有输出
你写成2026了哥哥
2024-12-26 小结(1)大数据早就能扫黄,找足证据不慌张 
明白了,between 2 and4 里面只有2、3
between 2 and 5 里面有 2、3、4
别闹。。 between and 是前闭后闭的 234;2345
2024-12-26 小结(1)大数据早就能扫黄,找足证据不慌张 
第一种跟第二种输出答案不一样
只有一个答案是正确的
2024-12-24 分组与聚合函数(5)五花八门的项目,其实都有固定套路(2) 
select
	trx_amt
	,count(trx_amt) as total_trx_cnt
    ,count(distinct usr_id) as unique_usr_cnt
    ,count(trx_amt)/count(distinct usr_id) as avg_trx_per_user
from cmb_usr_trx_rcd
where mch_nm='红玫瑰按摩保健休闲'
	and year(trx_time)=2023 and month(trx_time) in (1,2,3,4,5,6,7,8,9,10,11,12)
	or year(trx_time)=2024 and month(trx_time) in (1,2,3,4,5,6)
group by trx_amt
order by avg_trx_per_user desc
limit 5

我输出的结果中total_trx_cnt 数量不对,288.888,1288都多了两个
啥也没说
2024-12-23 分组与聚合函数(2)擦边营收怎么样,聚合函数可看出 
我想问问为什么selet中trx_time不能用date_format(trx_time,%y-%m-%d) as trx_date
啥也没说

提交记录

提交日期 题目名称 提交代码
2025-02-16 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH daily_unique_logins 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)
),
retention_days AS (
    SELECT
        dul1.usr_id,
        dul1.login_date AS first_login_date,
        dul2.login_date AS next_day_login_date,
        DATEDIFF(dul2.login_date, dul1.login_date) AS days_diff
    FROM
        daily_unique_logins dul1
    LEFT JOIN
        daily_unique_logins dul2
    ON
        dul1.usr_id = dul2.usr_id AND
        dul2.login_date BETWEEN dul1.login_date + INTERVAL 1 DAY AND dul1.login_date + INTERVAL 14 DAY
)
SELECT
    first_login_date,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff BETWEEN 1 AND 3 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_3_retention_rate,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff BETWEEN 1 AND 7 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_7_retention_rate,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff BETWEEN 1 AND 14 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_14_retention_rate
FROM
    retention_days
WHERE
    first_login_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
GROUP BY
    first_login_date
ORDER BY
    first_login_date;
2025-02-16 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH daily_unique_logins AS (
    SELECT
        usr_id,
        DATE(login_time) AS login_date
    FROM
        user_login_log
    WHERE
        login_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
    GROUP BY
        usr_id,
        DATE(login_time)
),
retention_days AS (
    SELECT
        dul1.usr_id,
        dul1.login_date AS first_login_date,
        dul2.login_date AS next_day_login_date,
        DATEDIFF(dul2.login_date, dul1.login_date) AS days_diff
    FROM
        daily_unique_logins dul1
    LEFT JOIN
        daily_unique_logins dul2
    ON
        dul1.usr_id = dul2.usr_id AND
        dul2.login_date BETWEEN dul1.login_date + INTERVAL 1 DAY AND dul1.login_date + INTERVAL 14 DAY
)
SELECT
    first_login_date,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff = 1 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_1_retention_rate,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff = 3 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_3_retention_rate,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff = 7 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_7_retention_rate,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff = 14 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_14_retention_rate
FROM
    retention_days
WHERE
    first_login_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY
    first_login_date
ORDER BY
    first_login_date;
2025-02-16 抖音面试真题(1)T+1日留存率 
with data1 as (
	select	
		usr_id
		,date(login_time) as login_date
	from
		user_login_log
	where
		datediff(current_date,date(login_time))<=30
	group by
		1,2
),
data2 as (
	select
		T.usr_id
		,T.login_date as T_date
		,T_1.login_date as T_1_date
	from
		data1 as T
	left join
		data1 as T_1
	on 
		 T.usr_id = T_1.usr_id 
      and datediff(T.login_date, T_1.login_date) = -1
)
select 
    T_date as first_login_date, 
    concat(round(avg(T_1_date is not null)*100, 2), '%') as T1_retention_rate 
from 
    data2 
group by 
    T_date 
order by 
    T_date;
2025-02-16 好友步数排名-不考虑反向好友关系 
with friend_steps as (
	select
		t1.user1 as user_id
		,t1.user2 as friend_id
		,t2.steps
	from
		friend_relationships as t1
		inner join 
		user_steps as t2
		on 	t1.user2=t2.user_id
	union
	select
		user_id
		,user_id as friend_id
		,steps
	from
		user_steps
),
ranked_steps as (
	select
		fs.user_id
		,fs.friend_id
		,fs.steps
		,rank()over(partition by fs.user_id order by fs.steps desc) as row_num
	from
		friend_steps fs
)
select
	rs.user_id
,rs.row_num
from
	ranked_steps rs
where
	rs.user_id=rs.friend_id
2025-02-16 好友步数排名-不考虑反向好友关系 
withfriend_summary1 as (
	select
		f.user1
		,f.user2
		,u.steps as steps2
	from
		friend_relationships as f
		inner join
		user_steps as u
		on f.user2=u.user_id
),
friend_summary2 as (
	select
		f.user1
		,f.user2
		,f.steps2
		,u.steps as steps1
	from
		friend_summary1 as f
		inner join
		user_steps as u
		on f.user1=u.user_id
)
select
	user1
	,sum(case when steps2<steps1 then 0 else 1 end)+1 as num
from
	friend_summary2
group by
	user1
2025-02-14 计算每个用户的购买频率-天数(F) 
select
	cust_uid
,count(distinct trx_dt) as transaction_count
from
	mt_trx_rcd_f
group by
	cust_uid
order by
	transaction_count desc
2025-02-14 计算每个用户的购买频率-次数(F) 
select
	cust_uid
	,count(cust_uid) as transaction_count
from
	mt_trx_rcd_f
group by
	cust_uid
order by
	transaction_count desc
2025-02-14 经过3个象限的一元一次函数 
select 
    * 
from
    numbers_for_fun
where
    a = 0 and b<>0 and c<>0
order by 1
2025-02-14 经过至少两个象限的一元一次函数 
select
	*
from
	numbers_for_fun
where
	a=0
and b!=0
2025-02-14 一元一次函数形成的三角形面积 
select
	*
from
	numbers_for_fun
where
	a=0
and abs(-(c/b))*abs(c)>=10
2025-02-14 一元一次函数形成的三角形面积 
select
	*
from
	numbers_for_fun
where
	a=0
and abs(-(c/b))*abs(c)>=5
2025-02-14 一元一次函数形成的等腰三角形 
select 
    * 
from 
    numbers_for_fun
where 
    a=0 and b in (1,-1)
order by 
    id
2025-02-14 一元一次函数形成的等腰三角形 
select
	*
from
	numbers_for_fun
where
	a=0
and c!=0
and (b=1 or b=-1)
order by	
	id
2025-02-14 不分类别的最火直播间 
select
	t2.live_id
,t2.live_nm
,count(usr_id) as enter_cnt 
from
	ks_live_t2 as t2
left join
ks_live_t1 as t1
using(live_id)
where
	(substr(enter_time,1,10)='2021-09-12' and hour(enter_time)=23)
group by
	t2.live_id
,t2.live_nm
order by
	enter_cnt desc
limit
	5
2025-02-14 不分类别的最火直播间 
select
	t2.live_id
,t2.live_nm
,count(usr_id) as enter_cnt 
from
	ks_live_t2 as t2
left join
ks_live_t1 as t1
using(live_id)
where
	(substr(enter_time,1,10)='2021-09-12' and hour(enter_time)=23)
group by
	t2.live_id
,t2.live_nm
order by
	enter_cnt desc
2025-02-13 窗口函数(3)越来越喜欢召妓,窗口函数用累计(1) 
with monthly_trx as (
    select 
        date_format(t.trx_time, '%Y-%m') as trx_mon, 
        sum(t.trx_amt) as monthly_trx_amt
    from 
        cmb_usr_trx_rcd t
    join 
        cmb_mch_typ m on t.mch_nm = m.mch_nm
    where 
        t.usr_id = 5201314520 
        and m.mch_typ = '休闲娱乐'
        and year(t.trx_time) between 2023 and 2024
    group by 
        trx_mon
    order by 
        trx_mon
),
cumulative_trx as (
    select 
        trx_mon, 
        monthly_trx_amt,
        sum(monthly_trx_amt) over ( order by trx_mon) as cumulative_trx_amt
    from 
        monthly_trx
)
select 
    trx_mon, 
    cumulative_trx_amt as trx_amt
from 
    cumulative_trx
order by 
    trx_mon;
2025-02-13 时间日期(4)阶段综合-按月统计日花费,一天都不要浪费 
WITH date_summary AS (
SELECT DISTINCT DATE_FORMAT(date_value, '%Y-%m') AS trx_mon
FROM date_table
WHERE DATE_FORMAT(date_value, '%Y-%m') BETWEEN '2023-01' AND '2024-06'
),
mch_summary AS (
SELECT 
u.usr_id,
u.mch_nm,
u.trx_time,
DATE_FORMAT(u.trx_time, '%Y-%m-%d') AS trx_date,
u.trx_amt,
m.mch_typ
FROM 
cmb_usr_trx_rcd AS u
LEFT JOIN 
cmb_mch_typ AS m ON u.mch_nm = m.mch_nm
WHERE 
u.usr_id = 5201314520
AND DATE_FORMAT(u.trx_time, '%Y-%m') BETWEEN '2023-01' AND '2024-06'
AND (m.mch_typ = '休闲娱乐' OR m.mch_typ IS NULL)
AND u.trx_amt >= 288
AND HOUR(u.trx_time) IN (23, 0, 1, 2)
),
total_summary AS (
SELECT 
d.trx_mon,
COALESCE(LAST_DAY(MAX(m1.trx_time)), '1900-01-01') AS last_day,
COALESCE(DAY(LAST_DAY(MAX(m1.trx_time))), 0) AS day_of_mon,
COALESCE(SUM(m1.trx_amt), 0) AS trx_amt,
COALESCE(COUNT(m1.trx_amt), 0) AS trx_cnt,
COALESCE(ROUND(SUM(m1.trx_amt) / DAY(LAST_DAY(MAX(m1.trx_time))), 2), 0) AS avg_day_amt,
COALESCE(ROUND(COUNT(m1.trx_amt) / DAY(LAST_DAY(MAX(m1.trx_time))), 2), 0) AS avg_day_cnt
FROM 
date_summary AS d
LEFT JOIN 
mch_summary AS m1 ON d.trx_mon = DATE_FORMAT(m1.trx_time, '%Y-%m')
GROUP BY 
d.trx_mon
)
SELECT 
trx_mon,
last_day,
day_of_mon,
trx_amt,
trx_cnt,
avg_day_amt,
avg_day_cnt
FROM 
total_summary
ORDER BY 
trx_mon;
2025-02-12 时间日期(3)按月统计日花费,一天都不要浪费 
select
	substr(u.trx_time,1,7) as trx_mon
,max(last_day(u.trx_time)) as last_day
,day(max(last_day(u.trx_time))) as days_of_mon
,sum(u.trx_amt) as trx_amt
,count(u.trx_amt) as trx_cnt
,sum(u.trx_amt)/day(max(last_day(u.trx_time))) as avg_day_amt
,count(u.trx_amt)/day(max(last_day(u.trx_time))) as avg_day_cnt
from
	cmb_usr_trx_rcd as u
inner join
cmb_mch_typ as m
using (mch_nm)
where
	u.usr_id=5201314520
and year(u.trx_time) in('2023','2024')
and m.mch_typ='休闲娱乐'
group by
	substr(u.trx_time,1,7)
order by	
	trx_mon
2025-02-12 时间日期(2)按月统计日花费,一天都不要浪费 
select
	substr(u.trx_time,1,7) as trx_mon
,max(last_day(u.trx_time)) as last_day
,day(max(last_day(u.trx_time))) as days_of_mon
from
	cmb_usr_trx_rcd as u
inner join
cmb_mch_typ as m
using (mch_nm)
where
	u.usr_id=5201314520
and year(u.trx_time) in('2023','2024')
and m.mch_typ='休闲娱乐'
group by
	substr(u.trx_time,1,7)
order by	
	trx_mon
2025-02-12 表连接(5)哪些没被分出来,用左用内你来猜 
SELECT 
m.mch_typ, 
u.mch_nm,
COUNT(u.trx_amt) AS trx_cnt, 
SUM(u.trx_amt) AS trx_amt
FROM 
cmb_usr_trx_rcd u
LEFT JOIN 
cmb_mch_typ m ON u.mch_nm = m.mch_nm
WHERE 
u.usr_id = '5201314520' and left(trx_time,4)=2024
and m.mch_typ is null
GROUP BY 
	m.mch_typ, 
u.mch_nm
ORDER BY
3 DESC