首页 > 试题广场 > 实习广场投递简历分析(二)
[编程题]实习广场投递简历分析(二)
  • 热度指数:26773 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在牛客实习广场有很多公司开放职位给同学们投递,同学投递完就会把简历信息存到数据库里。
现在有简历信息表(resume_info),部分信息简况如下:

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

请你写出SQL语句查询在2025年内投递简历的每个岗位,每一个月内收到简历的数量,并且按先按月份降序排序,再按简历数目降序排序,以上例子查询结果如下:

示例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,'Python','2025-03-04',54),
(14,'C++','2025-03-04',65),
(15,'Java','2025-03-04',92),
(16,'Python','2025-03-05',34),
(17,'C++','2025-03-05',34),
(18,'Java','2025-03-05',34),
(19,'Python','2026-01-04',230),
(20,'C++','2026-02-06',231);

输出

Java|2025-03|126
C++|2025-03|99
Python|2025-03|88
Python|2025-02|93
C++|2025-02|68
Java|2025-02|66
C++|2025-01|107
Python|2025-01|66
Java|2025-01|53
left函数更为简便:
select job, left(date,7) mon, sum(num) cnt
from resume_info
where year(date)=2025
group by job,mon
order by mon desc,cnt desc


发表于 2021-03-11 11:58:36 回复(9)
select job, 
       date_format(date,"%Y-%m") as mon,
       sum(num) as cnt
from resume_info
where left(date,4)="2025"
group by  job,mon
order by mon desc, cnt desc
mysql常用函数:
EXTRACT(type FROM d) 从日期 d 中获取指定的值,type 指定返回的值。type可为year,week,moth等等
DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d. f的表达式如'%Y-%m-%d %r' 是2011-11-11 11:11:11 AM。 '%Y-%m‘是2011-11.
LEFT(s,n) 返回字符串 s 的前 n 个字符

发表于 2021-03-23 09:55:41 回复(0)
select
    job, left(r.date,7) as mon, sum(num) as cnt
from
    resume_info r
group by
    mon, job
having
    mon regexp '2025+'
order by
    month(r.date) DESC,
    cnt DESC

发表于 2021-07-04 10:08:46 回复(0)
不知道为啥我的left好像没用
select job, date_format(date, '%Y-%m') mon, sum(num) cnt
from resume_info
where YEAR(date) = '2025'
group by job, mon
order by mon desc, cnt desc


发表于 2021-04-10 17:26:13 回复(0)
select job,strftime('%Y-%m',date)as mon,sum(num) as cnt
from resume_info
where date>='2025-01-01' and date<='2025-12-31'
group by job,mon
order by mon desc,cnt desc
sqlite中时间转化用strftime
发表于 2021-03-10 11:51:39 回复(0)
-- 按照job,month 聚合
-- 先用year,month 提取出年份月份,用concat拼接;之后发现用substr()截取date更符合
-- 也提醒了自己一个小的知识点,平时习惯用count(*);但是sum(*) 是不行的,需要具体写哪一列;比如说sum(num)
select job, substr(date, 1,7) mon, sum(num) as cnt
  from resume_info 
 where year(date) = 2025
 group by job, substr(date, 1,7)
 order by mon desc, cnt desc;
发表于 2021-03-08 17:22:15 回复(0)
select job, substr(date, 1, 7) as mon, sum(num) as cnt
from resume_info where year(date) = 2025
group by job, mon order by mon desc, cnt desc

发表于 2021-07-27 16:53:06 回复(0)
SELECT job,DATE_FORMAT(DATE,'%Y-%m') AS mon,SUM(num) AS cnt
FROM resume_info
WHERE YEAR(DATE)=2025
GROUP BY job,mon
ORDER BY mon DESC,cnt DESC

发表于 2021-07-25 19:23:10 回复(0)
select job
,substring(date,1,7) mon
,sum(num) cnt
from resume_info
where substring(date,1,4) = '2025'
group by 1,2
order by mon desc,cnt desc

发表于 2021-07-21 14:21:23 回复(0)
(1) 提取月份的两种方法:
date_format(date,'%Y-%m')
substr(date,1,7)
貌似第一种更快

解题的两种方法:
(1)窗口函数
select distinct job,date_format(date,'%Y-%m') mon,
sum(num) over(partition by job,date_format(date,'%Y-%m')) cnt from resume_info
where year(date) = '2025'
order by mon desc,cnt desc
(2)group by
select distinct job,date_format(date,'%Y-%m') mon,
sum(num) cnt from resume_info
where year(date) = '2025'
group by mon,job
order by mon desc,cnt desc

发表于 2021-07-13 23:56:15 回复(0)
select t1.job,date_format(t1.date,'%Y-%m') as mon,
    sum(t1.num) as cnt 
from resume_info t1 
where date_format(t1.date,'%Y') = 2025 
group by t1.job,date_format(t1.date,'%Y-%m') 
order by mon desc,cnt desc 
发表于 2021-07-11 10:25:35 回复(0)
截取日期的形式
1.left函数 left(date,7) 取左边的前7个字符
2.date_format函数 date_format(date,"%Y-%m") 
3. substr 函数 substr(date,1,7)  取从第1个字符到第7个
select job,date_format(date,"%Y-%m") mon,sum(num) cnt
from resume_info
where year(date)=2025
group by job,mon
order by mon desc,cnt desc


发表于 2021-06-30 16:51:38 回复(0)
select a.job,a.mon,sum(a.num) as cnt 
from(
select *,
       year(date) as year ,
       substr(date,1,7) as mon
from resume_info
where year(date)='2025'
)a
group by a.job,a.mon
order by a.mon desc,cnt desc

发表于 2021-06-29 19:59:40 回复(0)

考察date_format

SELECT job,DATE_FORMAT(`date`,'%Y-%m') AS Mon,SUM(num) AS cnt     
FROM resume_info
WHERE `date` BETWEEN '2025-01-01' AND '2025-12-31'
GROUP BY job,Mon 
ORDER BY Mon DESC,cnt DESC;
发表于 2021-06-24 19:29:33 回复(0)
select job,substring(date,1,7) mon,sum(num) cnt
from resume_info
where year(date) = '2025'
group by job,mon
order by month(date) desc,cnt desc

发表于 2021-06-22 16:30:10 回复(0)

唯一的难点就是怎么提取出日期中的年月了,可以采用date_format函数

select job, date_format(date,'%Y-%m') as mon,
sum(num) as cnt
from resume_info
where year(date)='2025'
group by job, date_format(date,'%Y-%m')
order by mon desc,cnt desc
发表于 2021-06-13 23:08:21 回复(0)
# 编译环境:mysql 
select job,date_format(date,'%Y-%m') as new_date,sum(num) as cnt
from resume_info
where date_format(date,'%Y')='2025'
group by date_format(date,'%Y-%m'),job
order by date_format(date,'%Y-%m') desc,sum(num) desc;

发表于 2021-06-11 13:38:32 回复(0)

select job,date_format(date,'%Y-%m') as mon, sum(num) as cnt
from resume_info
where year(date) = '2025'
group by job,mon
order by mon desc,cnt desc
编辑于 2021-06-01 16:17:42 回复(1)
select job,date_format(date,'%Y-%m') mon ,sum(num) cnt from resume_info
where year(date)='2025'
group by mon,job
order by mon desc,cnt desc;
发表于 2021-05-30 21:54:44 回复(0)
select job,substr(date,1,7) mon,sum(num) cnt from resume_info
where year(date) = '2025' 
group by substr(date,1,7),job
order by mon desc, cnt desc
发表于 2021-05-28 17:03:38 回复(0)