
SQL
一抹阳光&
再努力再坚持
展开
-
MyBatis中resultType和resultMap的区别
MyBatis中resultType和resultMap的区别在使用MyBatis时,需要使用的时mapper.xml映射文件,结果集的返回大致是两种 resultType 和 resultMap, 那么这两者有什么区别和联系呢?resultType用来处理非常简单的结果集,就是列名能够与实体类属性匹配的的结果集(mybatis使用驼峰命名(student_id ⇒ studentId)也可以,但是字段必须要匹配)resultMap更擅长来处理复杂映射的结果集。比如一对一、一对多的复杂关系。最简原创 2021-12-27 23:56:22 · 1152 阅读 · 0 评论 -
SQL8 删除记录(三)
牛客网打卡:SQL8 删除记录(三)思路SQL表的重置(删除)完全删除表 drop table 删除表格,包括数据重置表的储存的所有数据(自增的主键从1开始),不重置表的各种定义,重置的是 除了表的各种定义和约束外 的所有数据 truncate table 表名删除表某一部分的数据,不重置索引,自增的主键从原有的开始,可以回撤** delete from 表名代码truncate table exam_record...原创 2021-11-07 23:17:30 · 382 阅读 · 0 评论 -
SQL7 删除记录(二)
牛客网打卡:SQL7 删除记录(二)思路此时有两种条件第一种是:submit_time is null or submit_time-start_time<5第二种是:开始做大时间最早的三条记录代码delete from exam_record where (submit_time is null or timestampdiff(minute,start_time,submit_time) < 5) order by start_time limit原创 2021-11-06 14:21:45 · 140 阅读 · 0 评论 -
SQL5 更新记录(二)
牛客网打卡:SQL5 更新记录(二)首先根据题目所知,考试已经开始了,所以 start_time 不是空,未提交也就是 submit_time 为空更新多个字段的值,使用 逗号 分隔开即可使用逻辑符号时,会默认忽略为 null 的记录代码update exam_record set submit_time='2099-01-01 00:00:00',score=0 where submit_time is null and start_time < '202原创 2021-11-05 15:16:13 · 73 阅读 · 0 评论 -
SQL3 插入记录(三)
牛客网打卡:SQL3 插入记录(三)注意要求:无论是否存在都应该插入数据使用函数 replace into如果仅仅只是插入函数,那么使用 insert into 即可代码replace into examination_info (exam_id,tag,difficulty,duration,release_time) value (9003,'SQL','hard',90,'2021-01-01 00:00:00')...原创 2021-11-05 14:16:49 · 99 阅读 · 0 评论 -
SQL1 插入记录(一)
牛客网打卡:SQL1 插入记录(一)解题思路使用 insert into 函数即可代码insert into exam_record (uid, exam_id, start_time, submit_time, score) values(1001,9001,'2021-09-01 22:11:12','2021-09-01 23:01:12',90);insert into exam_record (uid, exam_id, start_time, submit原创 2021-10-31 19:51:33 · 752 阅读 · 0 评论 -
SQL35 浙大不同难度题目的正确率
牛客网打卡:SQL35 浙大不同难度题目的正确率不要写又臭又长的SQL语句从刚开始理解要统计正确率,所以正确的个数和错误的个数肯定是要统计的,正确的个数,那么通过sum和if函数进行统计sum(if(result='right',1,0)) / count(result)重要的是表的链接,第一张表示 question_practice_detail 或者 question_detail,得到 question_id 和 difficult_level 的关联然后进行子查询或者是进行原创 2021-10-31 17:17:08 · 500 阅读 · 0 评论 -
SQL39 21年8月份练题总数
牛客网打卡:SQL39 21年8月份练题总数解题思路首先确定需要对用户进行去重,得到才是总用户数,练习过题目的总次数,也就是练习了多少次而不是总共多少道题目代码select count( distinct device_id) did_cnt, count(question_id) question_cnt -- 对question_practice_detail表中进行统计,统计的不是题目的总数,而是练习了多少次 from question_practice_de原创 2021-10-31 16:45:45 · 208 阅读 · 0 评论 -
SQL33 找出每个学校GPA最低的同学
牛客网打卡:SQL33 找出每个学校GPA最低的同学解题思路组内排序,根据学校进行分组,然后每个学校分别进行排序,也就是组内排序需要用到关键词 四大排序 排序的内容是 分组(partition)好以后的降序排列(desc)注意: 降序排列是排列,排序是排序代码select t.device_id,t.university,t.gpa from (-- 要将新列名用引号圈起,否则会出现问题 select device_id,university,g原创 2021-10-27 10:53:21 · 673 阅读 · 0 评论 -
SQL31 提取博客URL中的用户名
牛客网打卡:SQL31 提取博客URL中的用户名使用substring_index函数进行字串的截取,substring_index函数适合用分割某一个字符,相当于split,然后截取某一个值substring_index(分割的列,用什么来分割,从哪开始(从0开始,从-1开始))select device_id, substring_index(blog_url,'/',-1) user_name -- 使用substring_index函数 from user_submi原创 2021-10-26 23:59:14 · 262 阅读 · 0 评论 -
SQL30 统计每种性别的人数
牛客网打卡:SQL30 统计每种性别的人数解题思路这道题目的关键是怎么在一个字段(多种内容)中,取出一个数据特别是这个数据还类似 如 female male使用匹配,然后选择长度较长的作为匹配选项注意当选择做一个新的值时,if后面的两种结果都需要加上引号,否则会提示不存在的值select if(profile like '%female','female','male') as gender, count(device_id) -- count(*) count(1)原创 2021-10-26 16:37:41 · 1521 阅读 · 0 评论 -
SQL29 计算用户的平均次日留存率
牛客网打卡:SQL29 计算用户的平均次日留存率解题思路题目给出的意思:不考虑用户的答题情况,只考虑是否答题了也就是选出两张表,第一张是当天的答题情况,第二张是第二天的情况时刻理解新的虚拟表和使用的虚拟表的区别和对比使用left join 或者其他的连接方式后已经更改了原有的结构了如果在外层使用原有的表名,对字段进行索引,得到的是连接表后更改以后的表的数据select count(t2.device_id) / count(t1.device_id) avg_cnt fro原创 2021-10-26 00:21:45 · 718 阅读 · 1 评论 -
SQL28 计算用户8月每天的练题数量
牛客网打卡:SQL28 计算用户8月每天的练题数量代码-- 使用year函数,month函数,进行条件设置、select day(date) day,count(*) question_cnt from question_practice_detail where year(date)=2021 and month(date)=08 group by day首先熟悉时间的函数year 取出年month 取出月day 取出日或者使用like函数,进行匹配like '202原创 2021-10-25 20:18:30 · 573 阅读 · 0 评论 -
SQL27 查看不同年龄段的用户明细
牛客网打卡:SQL27 查看不同年龄段的用户明细思路使用case when else 进行多阶段的匹配代码select device_id,gender, ( case when age<20 then '20岁以下' when age<25 then '20-24岁' when age>=25 then '25岁及以上' else '其他' end )as age_cut原创 2021-10-22 17:10:14 · 307 阅读 · 0 评论 -
SQL26 计算25岁以上和以下的用户数量 if函数 或者 case条件 或者 联合表
牛客网打卡 : SQL26 计算25岁以上和以下的用户数量select '25岁以下',count(device_id) number from user_profile where age<25 or age is nullunion allselect '25岁及以上',count(device_id) number from user_profile where age>=25使用联合表固然可以,但是还是属于麻烦使用if函数,或者是使用case when end进行组合sel原创 2021-10-22 16:00:03 · 466 阅读 · 0 评论 -
SQL中使用where过滤空值
SQL中使用where过滤空值的方法过滤空值的三种方法:(1) Where 列名 is not null(2) Where 列名 != ‘null’(3) Where 列名 <> ‘null’牛客打卡:SQL中使用where过滤空值select device_id,gender,age,university from user_profile where age is not null...原创 2021-10-20 17:13:17 · 10380 阅读 · 0 评论 -
183. 从不订购的客户
力扣打卡:183. 从不订购的客户解题思路可以用子查询进行实现或者实现一个谓动词exist进行实现代码# Write your MySQL query statement below-- 子查询select c.Name Customers from Customers c where c.Id not in (select CustomerId from Orders) ...原创 2021-10-17 22:49:21 · 67 阅读 · 0 评论 -
SQL 函数YEAR MONTH 查找特定日期
SQL中查找特定的年份 其中:like是一个实用的关键字 无论是查找月份还是查找日期,都可使用文件中,都可以使用like,因为都是用字符串的内容来表达,所以使用like进行通配是没有问题的。select * from student where year(Student.Sage) = '1990'select * from Student where Sage like '%1990%' 同理可以使用month函数来查找月份,函数的参数是需要查找的日期字段(表名+字段名)...原创 2021-09-26 18:32:06 · 1157 阅读 · 0 评论