首页 > 试题广场 >

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

[编程题]实习广场投递简历分析(三)
  • 热度指数:72670 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在牛客实习广场有很多公司开放职位给同学们投递,同学投递完就会把简历信息存到数据库里。
现在有简历信息表(resume_info),部分信息简况如下:
id job date num
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-01-04
260
20 Java
2026-02-14 721
21 Python
2026-02-14
321
22 C++
2026-02-14
134
23 Java
2026-02-24
928
24 Python
2026-02-24
525
25 C++
2027-02-06
231

第1行表示,在2025年1月2号,C++岗位收到了53封简历
......
最后1行表示,在2027年2月6号,C++岗位收到了231封简历

请你写出SQL语句查询在2025年投递简历的每个岗位,每一个月内收到简历的数目,和对应的2026年的同一个月同岗位收到简历的数目,最后的结果先按first_year_mon月份降序,再按job降序排序显示,以上例子查询结果如下:
job first_year_mon first_year_cnt second_year_mon
second_year_cnt
Python 2025-02 93 2026-02
846
Java 2025-02
66 2026-02
1649
C++ 2025-02
68 2026-02
394
Python
2025-01
66 2026-01
1268
Java
2025-01
53 2026-01
1478
C++
2025-01
107 2026-01
470
解析:
第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);

输出

Python|2025-02|93|2026-02|846
Java|2025-02|66|2026-02|1649
C++|2025-02|68|2026-02|394
Python|2025-01|66|2026-01|1268
Java|2025-01|53|2026-01|1478
C++|2025-01|107|2026-01|470
头像 码尚行动
发表于 2021-03-05 22:43:03
常用字符串函数 知识点:对字符串的操作 常用函数 对应描述 RIGHT(s,n) 返回字符串 s 的后 n 个字符 LEFT(s,n) 返回字符串 s 的前 n 个字符 MID(s,n,len) 从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s 展开全文
头像 牛客983634392号
发表于 2021-03-24 18:01:53
相连的两表选取的年份不同,其他部分不变,创建临时表方便修改和阅读 with as 创建临时表 WITH r1 AS ( SELECT id, job, date, DATE_FORMAT(date, '%Y-%m') AS first_year_mon, SUM(num) AS first_yea 展开全文
头像 高质量搬砖人
发表于 2021-04-03 09:58:38
参考一位网友的做法,感觉非常好理解 实际上就是两次查询再连结两张查询后的表 连接条件是个坑,job和date作为连结条件均不唯一(因为无法保证是同一个job然后不同年的同一月,单单连结job和date都无法做到这个条件)因此不能作为连结条件,会报错 解决方法:添加新字段concat(job,mon 展开全文
头像 取名困难户
发表于 2021-06-13 23:29:04
单独算出2025和2026年每个月份的投递数量并不难,上一题中也要做过了,难点在于怎样将相同job不同年相同月的链接起来,这里可以考虑几种字符串提取函数 SELECT a.job, a.first_year_mon, a.first_year_cnt, se 展开全文
头像 SunburstRun
发表于 2021-03-05 16:54:41
通过(二) https://blog.nowcoder.net/n/01bd43f9004344669a6ca9e658d56b25 我们可以写出: select job,DATE_FORMAT(date, '%Y-%m') as&nbs 展开全文
头像 牛客205692301号
发表于 2021-08-04 10:42:58
select job, concat('2025-',date_format(date, '%m')) first_year, sum(case when year(date)=2025 then num else 0 end) first_cnt, con 展开全文
头像 此用户名涉嫌违规
发表于 2021-04-20 14:14:31
题目描述:SQL语句查询在2025年投递简历的每个岗位,每一个月内收到简历的数目,和对应的2026年的同一个月同岗位,收到简历的数目,最后的结果先按first_year_mon月份降序,再按job降序排序显示。 原本想尝试用窗口函数直接搞定,怎么弄都不对。还是老老实实按逻辑一步一步来好了。(┭┮﹏┭ 展开全文
头像 强效捕获机
发表于 2022-03-26 17:04:52
按照上一题的思路,子查询分别得到25年和26年的两个表,通过where job=job,月份=月份,将两张表连接起来即可,感觉将job和月份组合新建一个主键也可以解决这个问题。 select A.job, A.mon as first_year_mon, A.cnt as first_year_cn 展开全文
头像 Gwen_夜雨声烦
发表于 2021-08-25 22:57:16
-- 获得每月岗位的投递总数 with each_month_job as ( select job,SUBSTRING(y_month,1,4) as year,SUBSTRING(y_month,6,2) as month,y_month, sum_num from( selec 展开全文
头像 牛客396153813号
发表于 2021-03-31 17:07:12
思路分享:首先查找2026年的简历投递情况->查找2025年的简历投递情况->上述两查询结果以job和月份进行内联结->从内联结表中获取所有信息step1-2: 查找2026/2025年的简历投递情况: select job,date,date_format(date,'%Y-%m 展开全文