首页 > 试题广场 >

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

[编程题]实习广场投递简历分析(二)
  • 热度指数:60434 时间限制: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
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
第1行表示,在2025年1月2号,C++岗位收到了53封简历
。。。
最后1行表示,在2026年2月6号,C++岗位收到了231封简历

请你写出SQL语句查询在2025年内投递简历的每个岗位,每一个月内收到简历的数量,并且按先按月份降序排序,再按简历数目降序排序,以上例子查询结果如下:
job mon cnt
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
示例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
select job, date_format(date, '%Y-%m'), sum(num) as sl
from resume_info
where year(date) = '2025'
group by date_format(date, '%Y-%m'), job
order by date_format(date, '%Y-%m')  desc, sl desc

发表于 2022-04-20 14:40:57 回复(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)
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 回复(14)
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,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)
select  job,
date_format(date,'%Y-%m') da,
sum(num) over(partition by date_format(date,'%Y-%m'),job) cnt
from resume_info
where YEAR(date) = '2025'
order by da desc, cnt desc

各位问一下,为什么我的语句会有两份重复发数据
发表于 2022-04-04 19:36:56 回复(0)
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;

编辑于 2024-04-11 20:14:07 回复(0)
select job,substring_index(date,'-',2) mon,sum(num) cnt
from resume_info
where year(date)='2025' 
group by substring_index(date,'-',2),job
order by substring_index(date,'-',2) desc,cnt desc

发表于 2023-09-10 17:45:50 回复(1)
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 回复(1)
不知道为啥我的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 回复(1)
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;

发表于 2024-11-12 14:46:56 回复(0)
SELECT
    job,
    LEFT(date, 7) AS mon,
    SUM(num) AS cnt
FROM resume_info
WHERE YEAR(date) = 2025
GROUP BY job, mon
ORDER BY mon DESC, cnt DESC
发表于 2024-10-29 16:38:13 回复(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

发表于 2024-10-23 12:21:22 回复(0)
select job,month,sum(num) cnt
from (
        select job,date_format(date,"%Y-%m") as month,
        num
        from resume_info 
        where year(date) =2025
) as t
group by job,month
order by month desc,cnt desc

发表于 2024-10-22 19:32:19 回复(0)
select job ,date_format(date,'%Y-%m') as mon,sum(num) cnt
from resume_info
where year(date) = 2025
group by job,date_format(date,'%Y-%m')
order by date_format(date,'%Y-%m') desc ,cnt desc

发表于 2024-10-22 17:39:57 回复(0)
select
job,
date_format(date,'%Y-%m') as mon
,
sum(num) as cnt
from resume_info
where date like
'2025%'
group by
mon,job
order by
mon desc,
cnt desc
发表于 2024-10-13 10:57:00 回复(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

发表于 2024-09-24 09:34:51 回复(0)
select job, left(date, 7) as mon, sum(num) as cnt
from resume_info
where left(date, 4) = '2025'
group by job, mon
order by mon desc, cnt desc
发表于 2024-09-20 15:20:23 回复(0)
-- 用SUBSTRING
SELECT
    job,
    SUBSTRING(date, 1, 7) mon,
    SUM(num) cnt
FROM
    resume_info
WHERE
    YEAR(date) = 2025
GROUP BY
    job,
    SUBSTRING(date, 1, 7)
ORDER BY
    mon DESC,
    CNT DESC

-- 用DATE_FORMAT
SELECT
    job,
    DATE_FORMAT(date, '%Y-%m') mon,
    SUM(num) cnt
FROM
    resume_info
WHERE
    YEAR(date) = 2025
GROUP BY
    job,
    DATE_FORMAT(date, '%Y-%m')
ORDER BY
    mon DESC,
    CNT DESC

发表于 2024-09-08 17:02:20 回复(0)
日期部分 用提取函数比用转换的函数更简单

SELECT
    job,
    LEFT ( date, 7 ) AS mon,
    sum( num ) AS cnt 
FROM
    resume_info 
WHERE
    YEAR ( date ) = "2025" 
GROUP BY
    mon,
    job 
ORDER BY
    mon DESC,
    cnt DESC
发表于 2024-09-06 10:40:48 回复(0)