首页 > 试题广场 >

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

[编程题]实习广场投递简历分析(二)
  • 热度指数:55606 时间限制: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,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'), 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)
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)
-- 按照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,
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)
不知道为啥我的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') 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;

发表于 2024-04-22 22:32:19 回复(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-04-12 09:34:29 回复(0)
SELECT job, LEFT(date, 7) as mon, SUM(num) as cnt
FROM resume_info
WHERE YEAR(date) = 2025
GROUP BY job, LEFT(date, 7)
ORDER BY mon DESC, cnt DESC
--以下为错误写法,在严格模式下(sql_mode=only_full_group_by),MySQL要求SELECT列表中的每个非聚合列必须出现在GROUP BY子句中,或者是依赖于GROUP BY子句中的聚合函数。若按month(date)分组,无法select非聚合列LEFT(date, 7)
/*SELECT job, LEFT(date, 7) as mon, SUM(num) as cnt
FROM resume_info
WHERE YEAR(date) = 2025
GROUP BY job, MONTH(date)
ORDER BY mon DESC, cnt DESC*/
编辑于 2024-03-15 20:23:37 回复(0)
SELECT job,DATE_FORMAT(`date`,'%Y-%m') as mon, SUM(num) as cnt
-- left(date, 7)
-- substr(date, 1,7)
FROM resume_info
WHERE year(`date`)='2025'
GROUP BY mon,job
ORDER BY mon DESC, cnt DESC
-- %M返回英文的月 %m返回数字

编辑于 2024-03-07 10:36:05 回复(0)
select job,left(date,7) mon,sum(num) cnt from resume_info
where date like '2025-%'
group by job,mon
order by mon desc,cnt desc;

编辑于 2024-02-07 14:05:25 回复(0)
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-01-02 15:42:05 回复(0)

select
    job,
    substr(date,1,7) as mon,
    sum(num) as cnt
from resume_info
where date between '2025-01-01' and '2025-12-31'
group by job,
    substr(date,1,7)
order by substr(date,1,7) desc, sum(num) desc

so easy
发表于 2023-11-26 20:23:05 回复(0)
select
    job,
    left (date, 7) 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;

发表于 2023-11-14 21:10:24 回复(0)
兄弟们,俺有个sql 语法执行小问题,如图
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
# 一个疑问:按照sql 执行顺序where 和group by 是先于select执行的 ,若我先在group 不要中命名mon ,后select mon 能不能行呢,然则不行
select job,mon,sum(num) cnt
from resume_info
where year(date)='2025'
group by date_format(date,'%Y-%m') mon,job
order by mon desc,cnt desc

发表于 2023-11-13 21:49:18 回复(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

发表于 2023-11-05 22:33:49 回复(0)

问题信息

上传者:牛客301499号
难度:
151条回答 2746浏览

热门推荐

通过挑战的用户

查看代码