![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
当代女大学生
这个作者很懒,什么都没留下…
展开
-
<数据库> WITH RECURSIVE递归
计算1到100的累加的结果:WITH RECURSIVE t(n) AS ( VALUES (1) UNION ALL SELECT n+1 FROM t WHERE n < 100)SELECT sum(n) FROM t;例题:力扣https://leetcode-cn.com/problems/find-the-missing-ids/原创 2022-03-05 11:40:14 · 422 阅读 · 0 评论 -
<数据库> LEAD函数的用法 Leetcode 1709. 访问日期之间最大的空档期
对于一张表的一行数据而言,在其之上的是Lag, 在其之下的是Lead+---------+------------+ LAG()------------------------ current_row------------------------ LEAD()+-----------------------+LEAD函数用法:LEAD(col, offset, default)col - 指你要操作的那一列offset - ...原创 2022-03-04 20:35:45 · 596 阅读 · 0 评论 -
<数据库> Leetcode1511. 消费者下单频率
写一个 SQL 查询,报告在 2020 年 6 月和 7 月 每个月至少花费 $100 的客户的 customer_id 和 customer_name 。以任意顺序返回结果表.查询结果格式如下例所示。# 2020 年 6 月和 7 月 # 每个月至少花费 $100 的客户的 customer_id 和 customer_name select c.customer_id,c.namefrom customers cjoin orders o o...原创 2022-02-28 21:28:00 · 451 阅读 · 0 评论 -
<数据库> 查找连续登录的用户
MySQL DATE_SUB() 函数 | 菜鸟教MySQL DATE_SUB() 函数 MySQL Date 函数 定义和用法 DATE_SUB() 函数从日期减去指定的时间间隔。 语法 DATE_SUB(date,INTERVAL expr type) date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。 type 参数可以是下列值: Type 值 MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUAR..https://..原创 2022-02-27 19:10:56 · 275 阅读 · 0 评论 -
<数据库> datediff、timestampdiff函数的区别
对日期范围搜索的大致有三种方式:1、between and2、datediff3、timestampdiffbetween andselect * from dat_document where commit_date between '2018-07-01' and '2018-07-04' 结果是1号到3号的数据,因为时间范围显示的实际上只是‘2018-07-01 00:00:00’到'2018-07-04 00:00:00'之间的数据,而'2018-07-04'的数据无原创 2022-02-26 21:06:19 · 725 阅读 · 0 评论 -
<数据库> last_day() 函数. 返回月份中的最后一天
select last_day('2008-02-01') 返回 2008-02-29select last_day('2008-08-08') 返回2008-08-31得到当前月份中有多少天,可以这样计算:select now(), day(last_day(now()))原创 2022-02-26 19:49:06 · 727 阅读 · 0 评论 -
<数据库> date_format()转换日期格式
Date_Format()函数用于以不同的格式显示日期时间数据DATE_FORMAT(date,format)中的format参数%a 缩写星期名%b 缩写月名%c 月,数值%D 带有英文前缀的月中的天%d 月的天,数值(00-31)%e 月的天,数值(0-31)%f 微秒%H 小时 (00-23)%h 小时 (01-12)%I 小时 (01-12)%i 分钟,数值(00-59)%j 年的天 (001-366)%k 小时 (0-23...原创 2022-02-21 19:30:12 · 1815 阅读 · 0 评论 -
<数据库> with as 的用法
WITH AS短语,也叫做子查询部分,是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。例子:with A as (select * from class)先执行select * from class 得到一个结果,将这个结果记录为A ,再执行select *from A 语句。A 表只是一个别名。也就是将重复用到的大批量 的SQL语句,放到with as 中,加一个别名,在后面用到的时候就可以直接用。对于大批量的SQL数据,起到优化的作用。...原创 2022-02-20 19:34:43 · 2072 阅读 · 0 评论 -
<数据库> 牛客SQL25 union all的使用
描述题目:现在运营想要分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,请取出相应结果,结果不去重。示例:user_profile根据示例,你的查询应返回以下结果(注意输出的顺序,先输出学校为山东大学再输出性别为男生的信息):错误写法:SELECT device_id,gender,age,gpafrom user_profilewhere university='山东大学' or gender='male'原创 2022-01-26 22:21:26 · 775 阅读 · 0 评论 -
<数据库> 窗口函数的使用
窗口函数:通俗易懂的学会:SQL窗口函数 - 知乎例题:SQL33找出每个学校GPA最低的同学错误写法:select device_id,university,min(gpa)from user_profilegroup by universityorder by gpa asc错误原因:每个学校gpa最小的同学id不一定就是取出的id,因此要用到窗口函数。正确题解:select device_id,university,gpa from...原创 2021-10-29 11:05:33 · 176 阅读 · 0 评论 -
<数据库> substring_index函数截取字符串
substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数例题:题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个性别的用户分别有多少参赛者,请取出相应结果。题解:select SUBSTRING_INDEX(profile,",",-1) as gender, count(*) as numberfrom use...原创 2021-10-29 10:38:46 · 2568 阅读 · 0 评论 -
<数据库> case的用法 SQL27 查看不同年龄段的用户明细
描述题目:现在运营想要将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况,请取出相应数据。(注:若年龄为空请返回其他。)select device_id,gender, case when age<20 then "20岁以下" when age>=20 and age<25 then "20-24岁" when age>=25 then "25岁及以上"原创 2021-10-29 10:05:51 · 966 阅读 · 0 评论 -
<数据库> if 条件语句的使用 SQL26 计算25岁以上和以下的用户数量
描述题目:现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量本题注意:age为null 也记为 25岁以下SELECT IF(age>=25,"25岁及以上","25岁以下") AS age_cut,count(*) AS numberFROM user_profileGROUP BY age_cut;...原创 2021-10-29 09:56:36 · 694 阅读 · 0 评论 -
<数据库> union 和 union all 的用法与差别
见:SQL UNION 和 UNION ALL 操作符例题:牛客SQL25查找山东大学男生的GPA题目:现在运营想要分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,请取出相应结果,结果不去重。错误写法:select device_id,gender,age,gpafrom user_profilewhere university='山东大学' or gender='male'正确写法:select devic...原创 2021-10-29 09:46:12 · 85 阅读 · 0 评论 -
<数据库> group by之后不能用where 只能用having
where是在分组(group by)前筛选having是分组后的筛选条件,在分组后的数据组内再筛选例题:牛客入门篇SQL19描述题目:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。错误写法:select university, avg(question_cnt) as avg_question_cnt, avg(answer_cnt) as avg_ans.原创 2021-10-27 20:57:29 · 671 阅读 · 0 评论 -
<数据库> 牛客SQL57 使用含有关键字exists
描述使用含有关键字exists查找未分配具体部门的员工的所有信息。CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) NOT NULL,`last_name` varchar(16) NOT NULL,`gender` char(1) NOT NULL,`hire_date` date NOT NULL,PRIMARY KEY (`e原创 2021-07-08 16:58:00 · 169 阅读 · 0 评论 -
<数据库> 牛客SQL54 去掉最大最小值 再求均值
描述查找排除最大、最小salary之后的当前(to_date ='9999-01-01')员工的平均工资avg_salary。CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`from_date`));如:INSERT INTO s..原创 2021-07-08 16:44:26 · 212 阅读 · 0 评论 -
<数据库> 牛客SQL63 刷题通过的题目排名 —— rank() over
题目描述在牛客刷题有一个通过题目个数的(passing_number)表,id是主键,简化如下:第1行表示id为1的用户通过了4个题目;.....第6行表示id为6的用户通过了4个题目;请你根据上表,输出通过的题目的排名,通过题目个数相同的,排名相同,此时按照id升序排列,数据如下:id为5的用户通过了5个排名第1,id为1和id为6的都通过了2个,并列第2毫无头绪 直接看题解select id ,number ,dense_rank原创 2021-07-08 15:38:05 · 162 阅读 · 1 评论 -
<数据库> 牛客SQL82 牛客的课程订单分析(六)
思路一:1.生成count_times表用来记录用户id出现的次数(times)2.将 order_info表 left join count_times表 删选出需要的行 作为tmp2表3.将 client 表 left join tmp2 表 生成最终答案代码:select tmp2.id,tmp2.is_group_buy,client.name client_name// ③将 client 表 left join tmp2 表 生成最终答案from clien...原创 2021-07-08 14:56:28 · 177 阅读 · 1 评论 -
<数据库> 牛客SQL39 强制索引
思路:想到创建索引的基本格式create index on 表名(列名)不适用本题题解:select *from salariesforce index(idx_emp_no)where emp_no=10005补充知识:强制索引 FORCE INDEXFORCE INDEX强制查询优化器使用指定的命名索引。查询优化器是MySQL数据库服务器中的一个组件,它为SQL语句提供最佳的执行计划。查询优化器使用可用的统计信息,来提出所有候选计划中成本最低的计划。..原创 2021-07-08 13:02:35 · 78 阅读 · 0 评论 -
<数据库> 牛客SQL38 针对actor表创建视图actor_name_view
我的题解:CREATE VIEW actor_name_view ASSELECT first_name first_name_v,last_name last_name_vFROM actor创建视图格式:CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition原创 2021-07-08 12:50:23 · 91 阅读 · 0 评论 -
<数据库> 牛客SQL53 按照dept_no进行汇总
想到了group by 和concat ,不知道 concat 怎么连接所有的员工题解:select dept_no,group_concat(emp_no) employeesfrom dept_empgroup by dept_no聚合函数:聚合函数group_concat(X,Y),其中X是要连接的字段,Y是连接时用的符号,可省略,默认为逗号,此函数必须与GROUP BY配合使用。此题以dept_no作为分组,将每个分组中不同的emp_no用逗号连接起来(即可省略Y)..原创 2021-07-08 12:45:10 · 105 阅读 · 0 评论 -
<数据库> 牛客SQL87 最差是第几名(一)
知道python的思路 sql 中的case不熟题解:select grade,sum(number) over (order by grade) t_rankfrom class_grade开窗函数:本题主要是考察sum() over (order by ) 开窗函数,sum(a) over (order by b) 的含义是:例如a b1 23 45 6按照b列排序,将a依次相加,得到结果,如下:a bsum(a) over (or...原创 2021-07-08 12:38:30 · 164 阅读 · 1 评论 -
<数据库> 牛客SQL52 获取Employees中的first_name
思路:想到python中的切片 试了下 不行题解:select first_namefrom employeesorder by RIGHT(first_name,2)right 函数的使用它能返回从最右边开始指定长度的字符串。同理LEFT函数就是返回从最左边开始的指定长度字符串。...原创 2021-07-08 12:30:54 · 128 阅读 · 0 评论 -
<数据库> 牛客SQL51 查找字符串 10,A,B 中逗号,出现的次数cnt
题解:select length("10,A,B") - length(replace('10,A,B',',',''))妙啊 想到 replace 函数!注意 MySQL 中不是用 len() 而是用 length()原创 2021-07-08 12:26:52 · 111 阅读 · 1 评论 -
<数据库> 牛客 SQL37 创建索引
题解:CREATE INDEX idx_lastname ON actor(last_name);CREATE UNIQUE INDEX uniq_idx_firstname ON actor(first_name);句式:create index 索引名 on 表名(字段);原创 2021-07-07 21:04:24 · 69 阅读 · 0 评论 -
MySQL 四种方式给字段添加索引
添加主键ALTER TABLE tbl_name ADD PRIMARY KEY (col_list);// 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。添加唯一索引 UNIQUEALTER TABLE tbl_name ADD UNIQUE index_name (col_list);// 这条语句创建索引的值必须是唯一的。添加普通索引 INDEXALTER TABLE tbl_name ADD INDEX index_name (col_lis原创 2021-07-07 20:56:01 · 624 阅读 · 0 评论 -
创建数据库表的 3 种方法
常规创建create table if not exists 目标表复制表格create 目标表 like 来源表将table1的部分拿来创建table2create table if not exists actor_name(first_name varchar(45) not null,last_name varchar(45) not null)select first_name,last_namefrom actor...原创 2021-07-07 20:50:51 · 993 阅读 · 0 评论 -
<数据库> 牛客SQL35 批量插入数据,不使用replace操作
思路:考虑 if not null 的情况我的错误题解:insert into actorvalues('3','ED','CHASE','2006-02-15 12:34:33');正确题解:insert ignore into actorvalues('3','ED','CHASE','2006-02-15 12:34:33');!注意insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据...原创 2021-07-07 20:42:48 · 85 阅读 · 0 评论 -
<数据库> 牛客 SQL84 实习广场投递简历分析(一)
我的代码:select job,sum(num)from resume_infowhere date>='2025-01-01' and date<'2026-01-01'group by joborder by sum(num) desc别人代码:SELECT job,SUM(num) AS cnt FROM resume_info WHERE date LIKE '2025%' GROUP BY job ORDER BY cnt DESC ;...原创 2021-07-07 17:22:06 · 171 阅读 · 0 评论 -
<数据库> 牛客SQL66 牛客每个人最近的登录日期(一)
题解:select user_id,max(date) as dfrom logingroup by user_idorder by user_id注意 group by 和 order by 都是 user_id原创 2021-07-07 16:57:38 · 185 阅读 · 0 评论 -
<数据库> 牛客SQL45 修改表名
rename table titles_test to titles_2017语法:rename table A to B原创 2021-07-07 16:30:51 · 70 阅读 · 0 评论 -
<数据库> 牛客SQL44 ——replace函数的用法
本题不用replace会报错题解:update titles_testset emp_no=replace(emp_no,10001,10005)where id=5REPLACE(String,from_str,to_str)即:将String中所有出现的from_str替换为to_str原创 2021-07-07 16:20:04 · 92 阅读 · 0 评论 -
<数据库> 牛客 SQL32 将employees表的所有员工的last_name和first_name拼接起来作为Name
压根没想到用 concat 函数题解:select concat(last_name,' ',first_name) as Namefrom employees原创 2021-07-07 15:43:25 · 105 阅读 · 0 评论 -
<数据库> LeetCode 627. 变更性别
无法做到只用一个update题解:update salaryset sex=if(sex='m','f','m')注意:update的句式 update - set - where sql也有 if 函数的使用原创 2021-07-07 10:28:53 · 94 阅读 · 0 评论 -
<数据库> LeetCode 596. 超过5名学生的课
思路:原表 as a找出distinct的课 as b在a中 生成b中的每个课程的len判断错误:len 不是这么用的 应该用count题解:select classfrom coursesgroup by classhaving count(distinct student)>=5注意:用group by 用count 用distinct 用having 对group之后的表格再筛选...原创 2021-07-06 21:36:38 · 67 阅读 · 1 评论 -
<数据库> LeetCode 197. 上升的温度
思路:表a 表b 都是原表select b.idfromwherea.data <b.dataa.temp<b.temp错误:没有考虑到必须是相邻的两天题解:select distinct a.idfrom Weather as a, Weather as bwhere DATEDIFF(a.recordDate,b.recordDate)=1 and a.Temperature > b.Tempera...原创 2021-07-06 21:22:39 · 75 阅读 · 0 评论 -
<数据库> LeetCode 196. 删除重复的电子邮箱
思路:先找出distinct的邮箱 作为表a在从person中找出邮箱位于表a中的人limit 1思路错了limit 1 不是这么用 题目要求找出id最小的题解:delete a.*from Person as a, Person as bwhere a.Email = b.Email and a.Id>b.Id删除不符合要求的表就行了tips:当成公式记忆 select - from - where...原创 2021-07-06 21:07:40 · 176 阅读 · 0 评论 -
<数据库> LeetCode 182. 查找重复的电子邮箱
思路:本来考虑用left join“ distinct一下用当前的减去distinct得到的就是重复的邮箱再对上面的这个结果distinct ”后来参考181题的题解做出来的select distinct a.Emailfrom Person as a, Person as bwhere a.Email = b.Email and a.Id <> b.Id...原创 2021-07-06 20:47:51 · 132 阅读 · 0 评论 -
<数据库> LeetCode 181. 超过经理收入的员工
思路有 不太会写 看的题解select a.Name as Employeefrom Employee as a, Employee as bwhere a.ManagerId=b.Id and a.Salary>b.Salary需要注意第一行 要给a表更改表名 第三行 最后要加上逗号原创 2021-07-06 20:33:57 · 72 阅读 · 0 评论