题解 | #实习广场投递简历分析(三)#

实习广场投递简历分析(三)

http://www.nowcoder.com/practice/83f84aa5c32b4cf5a75558d02dd7743c

看到这个题目的时候,第一反应就是要使用表连接,假设需要连接的两表为表a和表b。表a是将2025年按课程和月份分类汇总的简历数据,表b是将2026年按课程和月份分类汇总的简历数据。其中的关键是选择哪一字段为连接条件,这里我想了两个思路,供大家参考:

1、使用窗口函数

(select job,left(date,7) fy,sum(num) cnt,
 row_number()over(order by left(date,7) desc,job desc) rk1
from resume_info 
where Year(date) = '2025'
group by job,fy) a join
(select job,left(date,7) sy,sum(num) cnt,
 row_number()over(order by left(date,7) desc,job desc) rk2
from resume_info 
where Year(date) = '2026'
group by job,sy) b
on (a.job = b.job
and a.rk1= b.rk2)
order by a.fy desc,a.job DESC

大致思路是先找出工作类别、年-月份、分类汇总的简历数量以及按年-月份和职位进行排序的字段rk1,其中采用的排序函数为row_number()over(),即顺序排位,并将rk1作为之后表连接的条件字段。以同样的思路设置表b,并将表b中的rk2作为表连接的条件字段。

注意:采用此方法的前提是2025以及2026年的月份信息是一致的,这样才能确保rk1与rk2连接起来后是对应的相同的月份。

2、按工作类型和年-月份信息进行连接

(select job,left(date,7) fy,sum(num) cnt
from resume_info 
where Year(date) = '2025'
group by job,fy) a join
(select job,left(date,7) sy,left(DATE_ADD(date,interval -1 year),7) fy,sum(num) cnt
from resume_info 
where Year(date) = '2026'
group by job,sy,fy) b
on (a.job = b.job
and a.fy= b.fy)
order by a.fy desc,a.job DESC

这一思路用的较多,准确性也更高,其中的关键就是将年月份信息提取出来,此处我采用的是left函数。用法为left(str,n),即获取字符串str的前n个字符。在设置连接字段时,表a中的job和年月份信息都是已经拿到的,表b也获取了job字段,关键是如何设置表b中的年-月份字段,此处我采用的是date_add()函数,先将表b中的年-月份数据减掉一年,得到的年月份信息就与表a中的年月份信息保持了一致,在使用表连接时通过job字段和年月份字段同时使用就可以起到唯一识别的作用。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:35
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务