SQL
文章平均质量分 77
记载牛客的SQL刷题记录
双人与余
熟能生巧
展开
-
牛客SQL练习第30题
题目描述film表CREATE TABLE IF NOT EXISTS film (film_id smallint(5) NOT NULL DEFAULT '0',title varchar(255) NOT NULL,description text,PRIMARY KEY (film_id));category表CREATE TABLE category (category_id tinyint(3) NOT NULL ,name varchar(25) NOT NUL原创 2020-11-06 12:37:40 · 210 阅读 · 0 评论 -
牛客SQL练习第29题
题目描述film表CREATE TABLE IF NOT EXISTS film (film_id smallint(5) NOT NULL DEFAULT '0',title varchar(255) NOT NULL,description text,PRIMARY KEY (film_id));category表CREATE TABLE category (category_id tinyint(3) NOT NULL ,name varchar(25) NOT NUL原创 2020-11-06 12:34:53 · 217 阅读 · 0 评论 -
牛客SQL练习第28题
题目描述film表CREATE TABLE IF NOT EXISTS film (film_id smallint(5) NOT NULL DEFAULT '0',title varchar(255) NOT NULL,description text,PRIMARY KEY (film_id));category表CREATE TABLE category (category_id tinyint(3) NOT NULL ,name varchar(25) NOT NUL原创 2020-11-05 12:31:42 · 191 阅读 · 0 评论 -
牛客SQL练习第27题
题目描述给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。提示:在sqlite中获取datetime时间对应的年份函数为strftime(’%Y’, to_date)(数据保证每个员工的每条薪水记录to_date-from_date=1年,而且同一员工的下一条薪水记录from_data=上一条薪水记录的to_data)CREATE TABLE `salaries` (`e原创 2020-11-05 12:28:00 · 133 阅读 · 0 评论 -
牛客SQL练习第26题
题目描述汇总各个部门当前员工的title类型的分配数目,即结果给出部门编号dept_no、dept_name、其部门下所有的当前(dept_emp.to_date = ‘9999-01-01’)员工的当前(titles.to_date = ‘9999-01-01’)title以及该类型title对应的数目count(注:因为员工可能有离职,所有dept_emp里面to_date不为’9999-01-01’就已经离职了,不计入统计,而且员工可能有晋升,所以如果titles.to_date 不为 ‘9999原创 2020-11-04 12:40:50 · 185 阅读 · 1 评论 -
牛客SQL练习第25题
题目描述获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date=‘9999-01-01’,结果第一列给出员工的emp_no,第二列给出其manager的manager_no,第三列给出该员工当前的薪水emp_salary,第四列给该员工对应的manager当前的薪水manager_salaryCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_d原创 2020-11-04 12:38:03 · 124 阅读 · 0 评论 -
牛客SQL练习第23题
题目描述对所有员工的当前(to_date=‘9999-01-01’)薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列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`));解答:对排原创 2020-11-03 12:38:39 · 174 阅读 · 0 评论 -
牛客SQL练习第24题
题目描述获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date=‘9999-01-01’CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dept_no`));CREATE TA原创 2020-11-03 12:35:39 · 119 阅读 · 0 评论 -
牛客SQL练习第22题
题目描述统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sumCREATE TABLE `departments` (`dept_no` char(4) NOT NULL,`dept_name` varchar(40) NOT NULL,PRIMARY KEY (`dept_no`));CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char原创 2020-11-02 12:24:37 · 165 阅读 · 0 评论 -
牛客SQL练习第21题
题目描述查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序(注:可能有employees表和salaries表里存在记录的员工,有对应的员工编号和涨薪记录,但是已经离职了,离职的员工salaries表的最新的to_date!=‘9999-01-01’,这样的数据不显示在查找结果里面)CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT原创 2020-11-02 12:21:27 · 207 阅读 · 0 评论 -
牛客SQL练习第20题
题目描述查找员工编号emp_no为10001其自入职以来的薪水salary涨幅(总共涨了多少)growth(可能有多次涨薪,没有降薪)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`));解答:最近的工资减去首次工资,即原创 2020-10-30 12:08:57 · 110 阅读 · 0 评论 -
牛客SQL练习第19题
题目描述查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工CREATE TABLE `departments` (`dept_no` char(4) NOT NULL,`dept_name` varchar(40) NOT NULL,PRIMARY KEY (`dept_no`));CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT N原创 2020-10-30 12:05:03 · 118 阅读 · 0 评论 -
牛客SQL练习第18题
题目描述查找当前薪水(to_date=‘9999-01-01’)排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,你可以不使用order by完成吗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,`gende原创 2020-10-29 12:29:36 · 153 阅读 · 0 评论 -
牛客SQL练习第17题
题目描述获取当前(to_date=‘9999-01-01’)薪水第二多的员工的emp_no以及其对应的薪水salaryCREATE 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`));解答:先得到排第二的工资,在作为条件查询即可s原创 2020-10-29 12:14:04 · 92 阅读 · 0 评论 -
牛客SQL练习第16题
题目描述统计出当前(titles.to_date=‘9999-01-01’)各个title类型对应的员工当前(salaries.to_date=‘9999-01-01’)薪水对应的平均工资。结果给出title以及平均工资avg。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原创 2020-10-28 12:30:42 · 155 阅读 · 0 评论 -
牛客SQL练习第15题
题目描述查找employees表所有emp_no为奇数,且last_name不为Mary(注意大小写)的员工信息,并按照hire_date逆序排列(题目不能使用mod函数)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)原创 2020-10-28 12:26:45 · 129 阅读 · 0 评论 -
牛客SQL练习第14题
题目描述从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。注意对于重复的emp_no进行忽略(即emp_no重复的title不计算,title对应的数目t不增加)。CREATE TABLE IF NOT EXISTS `titles` (`emp_no` int(11) NOT NULL,`title` varchar(50) NOT NULL,`from_date` date NOT NULL,`to_date` date DEFAULT NUL原创 2020-10-27 12:14:13 · 115 阅读 · 0 评论 -
牛客SQL练习第13题
题目描述从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。CREATE TABLE IF NOT EXISTS "titles" (`emp_no` int(11) NOT NULL,`title` varchar(50) NOT NULL,`from_date` date NOT NULL,`to_date` date DEFAULT NULL);解答:很简单的分组题select title,count(emp_no)from title原创 2020-10-27 12:12:12 · 139 阅读 · 0 评论 -
牛客SQL练习第12题
题目描述获取所有部门中当前(dept_emp.to_date = ‘9999-01-01’)员工当前(salaries.to_date=‘9999-01-01’)薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列。CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date原创 2020-10-26 12:43:08 · 220 阅读 · 0 评论 -
牛客SQL练习第11题
题目描述获取所有员工当前的(dept_manager.to_date=‘9999-01-01’)manager,如果员工是manager的话不显示(也就是如果当前的manager是自己的话结果不显示)。输出结果第一列给出当前员工的emp_no,第二列给出其manager对应的emp_no。CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL, -- '所有的员工编号'`dept_no` char(4) NOT NULL, -- '部门编号'`from原创 2020-10-26 12:28:33 · 148 阅读 · 0 评论 -
牛客SQL练习第10题
题目描述获取所有非manager的员工emp_noCREATE TABLE `dept_manager` (`dept_no` char(4) NOT NULL,`emp_no` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dept_no`));CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`b原创 2020-10-23 12:55:52 · 128 阅读 · 0 评论 -
牛客SQL练习第9题
题目描述获取所有部门当前(dept_manager.to_date=‘9999-01-01’)manager的当前(salaries.to_date=‘9999-01-01’)薪水情况,给出dept_no, emp_no以及salary(请注意,同一个人可能有多条薪水情况记录)CREATE TABLE `dept_manager` (`dept_no` char(4) NOT NULL,`emp_no` int(11) NOT NULL,`from_date` date NOT NULL,`to原创 2020-10-23 12:48:32 · 154 阅读 · 0 评论 -
牛客SQL练习第8题
题目描述找出所有员工当前(to_date=‘9999-01-01’)具体的薪水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`));解答:去重可以使用distin原创 2020-10-22 12:23:48 · 201 阅读 · 0 评论 -
牛客SQL练习第7题
题目描述查找薪水变动超过15次的员工号emp_no以及其对应的变动次数tCREATE 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`));解答:按员工进行分组,统计其工资条数进行判断即可select emp_no ,count(t原创 2020-10-22 12:19:12 · 179 阅读 · 0 评论 -
牛客SQL练习第6题
题目描述查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序(请注意,一个员工可能有多次涨薪的情况)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原创 2020-10-21 12:27:23 · 169 阅读 · 0 评论 -
牛客SQL练习第5题
题目描述查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括暂时没有分配具体部门的员工(请注意输出描述里各个列的前后顺序)CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dept_no`));CREA原创 2020-10-21 12:20:56 · 132 阅读 · 0 评论 -
牛客SQL练习第4题
题目描述查找所有已经分配部门的员工的last_name和first_name以及dept_no(请注意输出描述里各个列的前后顺序)CREATE TABLE dept_emp (emp_no int(11) NOT NULL,dept_no char(4) NOT NULL,from_date date NOT NULL,to_date date NOT NULL,PRIMARY KEY (emp_no,dept_no));CREATE TABLE employees (emp_no int原创 2020-10-20 12:44:30 · 120 阅读 · 0 评论 -
牛客SQL练习第3题
题目描述查找各个部门当前(dept_manager.to_date=‘9999-01-01’)领导当前(salaries.to_date=‘9999-01-01’)薪水详情以及其对应部门编号dept_no(注:输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列)CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL, -- '员工编号',`salary` int(11) NOT NULL,`from_d原创 2020-10-20 12:36:24 · 182 阅读 · 0 评论 -
牛客SQL练习第2题
题目描述查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天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原创 2020-10-19 12:50:57 · 175 阅读 · 0 评论 -
牛客SQL练习第1题
题目描述查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为–,mysql为comment)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原创 2020-10-19 12:17:56 · 100 阅读 · 0 评论 -
牛客SQL练习第75题
题目描述牛客每次考试完,都会有一个成绩表(grade),如下:第1行表示用户id为1的用户选择了C++岗位并且考了11001分。。。第8行表示用户id为8的用户选择了前端岗位并且考了9999分请你写一个sql语句查询各个岗位分数升序排列之后的中位数位置的范围,并且按job升序排序,结果如下:解释:第1行表示C++岗位的中位数位置范围为[2,2],也就是2。因为C++岗位总共3个人,是奇数,所以中位数位置为2是正确的(即位置为2的10000是中位数)第2行表示Java岗位的中位数位置范围为原创 2020-09-20 22:51:47 · 368 阅读 · 1 评论 -
牛客SQL练习第73题
题目描述牛客每次考试完,都会有一个成绩表(grade),如下:第1行表示用户id为1的用户选择了C++岗位并且考了11001分。。。第8行表示用户id为8的用户选择了前端岗位并且考了9999分请你写一个sql语句查询用户分数大于平均分的所有grade的属性,并且以id的升序排序,如下:(注意: sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5,sqlite四舍五入的函数为round)解答:得到平均成绩表后连接成绩表即可select g.*from g原创 2020-09-20 22:42:30 · 352 阅读 · 0 评论 -
牛客SQL练习第72题
题目描述牛客每次考试完,都会有一个成绩表(grade),如下:第1行表示用户id为1的用户选择了C++岗位并且考了11001分。。。第8行表示用户id为8的用户选择了前端岗位并且考了9999分请你写一个sql语句查询各个岗位分数的平均数,并且按照分数降序排序,结果保留小数点后面3位(3位之后四舍五入):(注意: sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5,sqlite四舍五入的函数为round)解答:select job,round(sum(sco原创 2020-09-20 22:38:12 · 220 阅读 · 0 评论 -
牛客SQL练习第70题
题目描述牛客每天有很多人登录,请你统计一下牛客每个日期登录新用户个数,有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网,因为是第1次登录,所以是新用户。。。第4行表示id为2的用户在2020-10-13使用了客户端id为2的设备登录了牛客网,因为是第2次登录,所以是老用户。。第4行表示id为4的用户在2020-10-15使用了客户端id为1)的设备登录了牛客网,因为是第2次登录,所以是老用户请你写出一个sql语句原创 2020-09-18 12:54:46 · 399 阅读 · 0 评论 -
牛客SQL练习第69题
题目描述牛客每天有很多人登录,请你统计一下牛客新登录用户的次日成功的留存率,有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备第一次新登录了牛客网。。。第4行表示id为3的用户在2020-10-14使用了客户端id为2的设备登录了牛客网请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入),上面的例子查询结果如下:查询结果表明:id为2的用户在2原创 2020-09-18 12:44:29 · 339 阅读 · 0 评论 -
牛客SQL练习第68题
题目描述牛客每天有很多人登录,请你统计一下牛客每个用户最近登录是哪一天,用的是什么设备.有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网。。。第4行表示id为3的用户在2020-10-13使用了客户端id为2的设备登录了牛客网还有一个用户(user)表,简况如下:还有一个客户端(client)表,简况如下:请你写出一个sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用的设备的名字,并且查询结果按原创 2020-09-15 12:10:28 · 208 阅读 · 0 评论 -
牛客SQL练习第67题
题目描述牛客每天有很多人登录,请你统计一下牛客每个用户最近登录是哪一天。有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网第4行表示id为3的用户在2020-10-13使用了客户端id为2的设备登录了牛客网请你写出一个sql语句查询每个用户最近一天登录的日子,并且按照user_id升序排序,上面的例子查询结果如下:查询结果表明:user_id为2的最近的登录日期在2020-10-13user_id为3的最近的登录原创 2020-09-15 12:05:42 · 280 阅读 · 0 评论 -
牛客SQL练习第66题
题目描述现在有一个需求,让你统计正常用户发送给正常用户邮件失败的概率:有一个邮件(email)表,id为主键, type是枚举类型,枚举成员为(completed,no_completed),completed代表邮件发送是成功的,no_completed代表邮件是发送失败的。简况如下:第1行表示为id为2的用户在2020-01-11成功发送了一封邮件给了id为3的用户;…第3行表示为id为1的用户在2020-01-11没有成功发送一封邮件给了id为4的用户;…第6行表示为id为4的用户在2原创 2020-09-14 22:40:18 · 317 阅读 · 0 评论 -
牛客SQL练习第65题
题目描述牛客每次举办企业笔试的时候,企业一般都会有不同的语言岗位,比如C++工程师,JAVA工程师,Python工程师,每个用户笔试完有不同的分数,现在有一个分数(grade)表简化如下:第1行表示用户id为1的选择了language_id为1岗位的最后考试完的分数为12000,…第7行表示用户id为7的选择了language_id为2岗位的最后考试完的分数为11000,不同的语言岗位(language)表简化如下:请你找出每个岗位分数排名前2的用户,得到的结果先按照language的nam原创 2020-09-14 22:24:42 · 408 阅读 · 0 评论 -
牛客SQL练习题第64题
题目描述有一个person表,主键是id,如下:有一个任务(task)表如下,主键也是id,如下:请你找到每个人的任务情况,并且输出出来,没有任务的也要输出,而且输出结果按照person的id升序排序,输出情况如下:解答:没有任务的也要输出也要输出,左连接即可select p.id,p.name,t.contentfrom person p left join task t on p.id = t.person_idorder by p.id...原创 2020-09-13 17:20:01 · 281 阅读 · 0 评论