题解 | #实习广场投递简历分析(三)#
实习广场投递简历分析(三)
https://www.nowcoder.com/practice/83f84aa5c32b4cf5a75558d02dd7743c
SELECT m.job,m.first_year_mon,m.first_year_cnt, n.second_year_mon,n.second_year_cnt FROM (SELECT job,date_format(date,'%Y-%m') first_year_mon,sum(num) first_year_cnt FROM resume_info WHERE year(date) = 2025 GROUP BY job,first_year_mon ) m JOIN (SELECT job,date_format(date,'%Y-%m') second_year_mon,sum(num) second_year_cnt FROM resume_info WHERE year(date) = 2026 GROUP BY job,second_year_mon -- 将 first_year_mon 改为 second_year_mon ) n on m.job = n.job WHERE left(m.first_year_mon,4) = left(n.second_year_mon,4) - 1 -- 年份差1 AND substr(m.first_year_mon,6,2) = substr(n.second_year_mon,6,2) -- 月份相同 ORDER BY m.first_year_mon DESC,m.job DESC
按job,年-月做group by
1、查询第一年
SELECT job,date_format(date,'%Y-%m') first_year_mon,sum(num) first_year_cnt FROM resume_info WHERE year(date) = 2025 GROUP BY job,first_year_mon
2、查询第二年
SELECT job,date_format(date,'%Y-%m') second_year_mon,sum(num) second_year_cnt FROM resume_info WHERE year(date) = 2026 GROUP BY job,second_year_mon -- 将 first_year_mon 改为 second_year_mon
3、联结两表,对年份、月份进行判定
SELECT m.job,m.first_year_mon,m.first_year_cnt, n.second_year_mon,n.second_year_cnt FROM m JOIN n on m.job = n.job WHERE left(m.first_year_mon,4) = left(n.second_year_mon,4) - 1 -- 年份差1 AND substr(m.first_year_mon,6,2) = substr(n.second_year_mon,6,2) -- 月份相同
4、排序,完整代码如下
SELECT m.job,m.first_year_mon,m.first_year_cnt, n.second_year_mon,n.second_year_cnt FROM (SELECT job,date_format(date,'%Y-%m') first_year_mon,sum(num) first_year_cnt FROM resume_info WHERE year(date) = 2025 GROUP BY job,first_year_mon ) m JOIN (SELECT job,date_format(date,'%Y-%m') second_year_mon,sum(num) second_year_cnt FROM resume_info WHERE year(date) = 2026 GROUP BY job,second_year_mon -- 将 first_year_mon 改为 second_year_mon ) n on m.job = n.job WHERE left(m.first_year_mon,4) = left(n.second_year_mon,4) - 1 -- 年份差1 AND substr(m.first_year_mon,6,2) = substr(n.second_year_mon,6,2) -- 月份相同 ORDER BY m.first_year_mon DESC,m.job DESC
补充:
这里对年、月有更直观的判定。牛客运输结果和预期一致,但给的是答案错误
WHERE YEAR(DATE_SUB(n.second_year_mon, INTERVAL 1 YEAR)) = YEAR(m.first_year_mon) AND MONTH(n.second_year_mon) = MONTH(m.first_year_mon)