描述
在牛客实习广场有很多公司开放职位给同学们投递,同学投递完就会把简历信息存到数据库里。
现在有简历信息表(resume_info),部分信息简况如下:
第1行表示,在2025年1月2号,C++岗位收到了53封简历
......
最后1行表示,在2027年2月6号,C++岗位收到了231封简历
请你写出SQL语句查询在2025年投递简历的每个岗位,每一个月内收到简历的数目,和对应的2026年的同一个月同岗位,收到简历的数目,最后的结果先按first_year_mon月份降序,再按job降序排序显示,以上例子查询结果如下:
解析:
第1行表示Python岗位在2025年2月收到了93份简历,在对应的2026年2月收到了846份简历
......
最后1行表示C++岗位在2025年1月收到了107份简历,在对应的2026年1月收到了470份简历
示例1
输入:
drop table if exists resume_info; CREATE TABLE resume_info ( id int(4) NOT NULL, job varchar(64) NOT NULL, date date NOT NULL, num int(11) NOT NULL, PRIMARY KEY (id)); INSERT INTO resume_info VALUES (1,'C++','2025-01-02',53), (2,'Python','2025-01-02',23), (3,'Java','2025-01-02',12), (4,'C++','2025-01-03',54), (5,'Python','2025-01-03',43), (6,'Java','2025-01-03',41), (7,'Java','2025-02-03',24), (8,'C++','2025-02-03',23), (9,'Python','2025-02-03',34), (10,'Java','2025-02-04',42), (11,'C++','2025-02-04',45), (12,'Python','2025-02-04',59), (13,'C++','2026-01-04',230), (14,'Java','2026-01-04',764), (15,'Python','2026-01-04',644), (16,'C++','2026-01-06',240), (17,'Java','2026-01-06',714), (18,'Python','2026-01-06',624), (19,'C++','2026-02-14',260), (20,'Java','2026-02-14',721), (21,'Python','2026-02-14',321), (22,'C++','2026-02-24',134), (23,'Java','2026-02-24',928), (24,'Python','2026-02-24',525), (25,'C++','2027-02-06',231);
注意
STRFTIME()
LIKE
SUBSTR()
创造2个表,然后合拼
WITH first_t AS ( SELECT job, STRFTIME('%Y-%m', date) AS first_year_mon, SUM(num) AS first_year_cnt FROM resume_info WHERE date LIKE '2025%' GROUP BY job, first_year_mon ORDER BY first_year_mon DESC, job DESC), second_t AS ( SELECT job, STRFTIME('%Y-%m', date) AS second_year_mon, SUM(num) AS second_year_cnt FROM resume_info WHERE date LIKE '2026%' GROUP BY job, second_year_mon ORDER BY second_year_mon DESC, job DESC) SELECT first_t.job, first_t.first_year_mon, first_t.first_year_cnt, second_t.second_year_mon, second_t.second_year_cnt FROM first_t LEFT JOIN second_t ON first_t.job = second_t.job AND SUBSTRING(first_t.first_year_mon, 6, 2) = SUBSTRING(second_t.second_year_mon, 6, 2)