SQL实战题解_常用字符串函数

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

http://www.nowcoder.com/questionTerminal/83f84aa5c32b4cf5a75558d02dd7743c

常用字符串函数

知识点:对字符串的操作

常用函数 对应描述
RIGHT(s,n) 返回字符串 s 的后 n 个字符
LEFT(s,n) 返回字符串 s 的前 n 个字符
MID(s,n,len) 从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len)
LCASE(s) 将字符串 s 的所有字母变成小写字母

字符串函数转载自:https://www.runoob.com/mysql/mysql-functions.html

-- 查询在2025年投递简历的每个岗位,每个月内收到简历的数量和,对应的2026年的同月同岗位收到简历的数量,最后的结果先按first_year_mon月份降序,再按job降序排序显示
SELECT h1.job,first_year_mon,first_year_cnt,second_year_mon,second_year_cnt 
FROM 
-- 2025年的 
(SELECT job,DATE_FORMAT(DATE,'%Y-%m') AS first_year_mon,SUM(num) AS first_year_cnt
FROM resume_info
WHERE DATE LIKE '2025%'  -- 符合最左前缀匹配原则,也走索引
GROUP BY job,first_year_mon) AS h1
-- inner join 假装优化下,inner可以省略
INNER JOIN 
-- 2026年的
(SELECT job,DATE_FORMAT(DATE,'%Y-%m') AS second_year_mon,SUM(num) AS second_year_cnt
FROM resume_info
WHERE DATE LIKE '2026%'  -- 符合最左前缀匹配原则,也走索引
GROUP BY job,second_year_mon) AS h2  
-- 表连接条件:两表job相同且月份相同,
-- 因date日期类型经过 DATE_FORMAT()后变成 字符串,所以使用right()函数取后两位即为月数
ON h1.job=h2.job AND  right(first_year_mon,2)=right(second_year_mon,2) 
-- 排序
ORDER BY first_year_mon DESC,h1.job DESC;
全部评论
我用MONTH(t.first_year_mon)为什么会JOIN不到,大佬知道有什么区别别吗
1 回复 分享
发布于 2021-08-26 16:12
楼主,2025的(左表) inner join 2026的(右表),如果2025统计的结果集是2025-01、2025-02、2025-03,而2026统计的结果集是2026-03、2026-10、2026-11,最终内连接只会显示2025-03和2026-03(交集)。但题目要求是查2025以及对应的2026的,所以应该是查2025全部的,对应2026有就显示,没有就填充0/null。所以这里inner join 改成 left join会不会更符合情况一些
2 回复 分享
发布于 2023-03-14 13:14 山东
前面都一样 只是最后的JOIN ON 部分wo用的 MONTH(first_year_mon)= month(second_year_mon) 但是返回 NONE 求教
1 回复 分享
发布于 2022-01-07 01:01
大佬 我把right的那个链接条件改成:DATE_ADD(t1.first_year_mon,interval 1 YEAR)=t2.second_year_mon 为什么不行
点赞 回复 分享
发布于 2021-12-06 18:21
大佬们,我想问一哈,如果不写死2015 2016年 考虑2017 2018 。。。。类推,你们怎么写这个语句????
点赞 回复 分享
发布于 2021-10-23 10:59
请问为什么第20行不能group by h1.job
点赞 回复 分享
发布于 2021-09-24 16:46
挺好
点赞 回复 分享
发布于 2021-04-07 14:11
挺好
点赞 回复 分享
发布于 2021-03-06 07:57

相关推荐

已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
评论
94
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务