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

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

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

本题可拆解为两步:

  • 分别得到2025、2026年的数据
  • join连接同种job及相同month的数据

    2025、2026的数据

    代码与上题相同
    select job,date_format(date,'%Y-%m') as mon,sum(num) as cnt
    from resume_info
    where year(date)=2025  -- 2025/2026
    group by job,mon
    order by mon desc,cnt desc

    连接

    方法一:日期差为一年

  • period_diff(date1,date2) 可作月份之差
    其中date1 和 date2 参数是只能是YYYYMM或YYMM,故还需得到这种格式的月份变量,也因此不能使用聚合函数,可改为聚合窗口函数
    完整代码如下:
    select distinct q1.job,first_year_mon,first_year_cnt,
    second_year_mon,second_year_cnt
    from 
    (select job,date_format(date,'%Y-%m') as first_year_mon,
    date_format(date,'%Y%m') as mon,
    sum(num) over (partition by job,date_format(date,'%Y-%m'))
                 as first_year_cnt
    from resume_info
    where year(date)=2025) as q1
    join
    (select job,date_format(date,'%Y-%m') as second_year_mon,
    date_format(date,'%Y%m') as mon,
    sum(num) over (partition by job,date_format(date,'%Y-%m'))
            as second_year_cnt
    from resume_info
    where year(date)=2026) as q2
    on q1.job=q2.job and period_diff(q2.mon,q1.mon)=12
    order by first_year_mon desc,job desc
    易错点:由于内层表格未用聚合函数,外层取变量时要去重!!!

    方法二:字符串截取

  • right(string,n)
    两年同月份——两表中的mon后两个字符相同——right(mon,2)
    完整代码如下:
    select q1.job,first_year_mon,first_year_cnt,
    second_year_mon,second_year_cnt
    from 
    (select job,date_format(date,'%Y-%m') as first_year_mon,
    sum(num) first_year_cnt
    from resume_info
    where year(date)=2025
    group by job,first_year_mon) as q1
    join
    (select job,date_format(date,'%Y-%m') as second_year_mon,
    sum(num) as second_year_cnt
    from resume_info
    where year(date)=2026
    group by job,second_year_mon) as q2
    on q1.job=q2.job and right(q1.first_year_mon,2)=right(q2.second_year_mon,2)
    order by first_year_mon desc,job desc
全部评论

相关推荐

神哥了不得:放平心态,再找找看吧,主要现在计算机也变卷了,然后就比较看学历了,之前高中毕业你技术强,都能找到工作的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务