1.
SELECT *
FROM employees
ORDER BY hire_date DESC, emp_no DESC
LIMIT 1;
2.
select * from employees
where hire_date = (-- 注意这里是()
select distinct hire_date
from employees
order by hire_date desc
limit 2,1 -- LIMIT m,n : 表示从第m+1条开始,取n条数据;
)
题解:(1)首先需要加distinct去重。
假设 5-23(入职最晚日期)入职的有a,b,c 3人;
5-22(入职第二晚日期)入职的有d,e 2人;
5-21(入职倒数第三晚)入职的有f,g,h 3人;
5-21前入职的若干...
若不加distinct去重,那么按照日期倒序,limit 2,1(从倒数第2行开始,取一条数据)的查询结果为 5-23
加了distinct去重,会按入职日期进行分组,多个相同入职日期会分为一组,这样limit 2,1的结果即为 5-21。
(2)外层的where条件中根据子查询查出的倒数第三晚入职的日期,就能查询出符合条件的员工信息。
3.
select salaries.* , dept_manager.dept_no
from salaries inner join dept_manager
on salaries.emp_no = dept_manager.emp_no
where salaries.to_date = '9999-01-01' and dept_manager.to_date='9999-01-01';
这样也行:
select salaries.* , dept_manager.dept_no
from salaries inner join dept_manager
on salaries.emp_no = dept_manager.emp_no and salaries.to_date = '9999-01-01' and dept_manager.to_date='9999-01-01'
4.
select last_name, first_name, dept_emp.dept_no
from employees inner join dept_emp
on employees.emp_no = dept_emp.emp_no
where dept_emp.dept_no is not null;
/*
查询已分配部门的员工,即查询dept_no不为空的对应员工。
此处所要查询的数据在不同的表,因而用多表连接查询。
*/
5.
select ep.last_name, ep.first_name, dp.dept_no
from employees ep
left join dept_emp dp
on ep.emp_no = dp.emp_no;
7.
SELECT emp_no, COUNT(emp_no) AS t
FROM salaries
GROUP BY emp_no
HAVING t > 15
/*
此题应注意以下3点:
1、用COUNT()函数和GROUP BY语句可以统计同一emp_no值的记录条数
2、根据题意,输出的变动次数为t,故用AS语句将COUNT(emp_no)的值转换为t
3、由于COUNT()函数不可用于WHERE语句中,故使用HAVING语句来限定t>15的
*/
8.
分割线,下面列表是为了防止找不到顺序。。。
SQL1 | 查找最晚入职员工的所有信息
| 入门 | 42.04% |
SQL2 | 查找入职员工时间排名倒数第三的员工所有信息
| 简单 | 38.86% |
SQL3 | 查找各个部门当前领导当前薪水详情以及其对应部门编号dept_no
| 中等 | 23.70% |
SQL4 | 查找所有已经分配部门的员工的last_name和first_name | 简单 | 39.59% |
SQL5 | 查找所有员工的last_name和first_name以及对应部门编号dept_no | 中等 | 39.18% |
SQL7 | 查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t | 简单 | 40.41% |
SQL8 | 找出所有员工当前具体的薪水salary情况 | 简单 | 48.21% |
SQL10 | 获取所有非manager的员工emp_no | 简单 | 39.41% |
SQL11 | 获取所有员工当前的manager | 中等 | 31.15% |
SQL12 | 获取所有部门中当前员工薪水最高的相关信息 | 困难 | 19.67% |
SQL15 | 查找employees表所有emp_no为奇数 | 简单 | 45.17% |
SQL16 | 统计出当前各个title类型对应的员工当前薪水对应的平均工资 | 中等 | 34.32% |
SQL17 | 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary | 简单 | 42.95% |
SQL18 | 查找当前薪水排名第二多的员工编号emp_no | 较难 | 24.93% |
SQL19 | 查找所有员工的last_name和first_name以及对应的dept_name | 中等 | 30.52% |
SQL21 | 查找所有员工自入职以来的薪水涨幅情况 | 困难 | 20.29% |
SQL22 | 统计各个部门的工资记录数 | 中等 | 28.84% |
SQL23 | 对所有员工的当前薪水按照salary进行按照1-N的排名 | 较难 | 26.13% |
SQL24 | 获取所有非manager员工当前的薪水情况 | 较难 | 26.97% |
SQL25 | 获取员工其当前的薪水比其manager当前薪水还高的相关信息 | 困难 | 26.18% |
SQL26 | 汇总各个部门当前员工的title类型的分配数目 | 困难 | 23.73% |
SQL28 | 查找描述信息中包括robot的电影对应的分类名称以及电影数目 | 较难 | 18.63% |
SQL29 | 使用join查询方式找出没有分类的电影id以及名称 | 中等 | 37.94% |
SQL30 | 使用子查询的方式找出属于Action分类的所有电影对应的title,description | 中等 | 44.60% |
SQL32 | 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 | 简单 | 36.46% |
SQL33 | 创建一个actor表,包含如下列信息 | 中等 | 28.07% |
SQL34 | 批量插入数据 | 简单 | 41.10% |
SQL35 | 批量插入数据,如果数据已经存在,请忽略,不使用replace操作 | 中等 | 43.91% |
SQL36 | 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表 | 中等 | 43.06% |
SQL37 | 对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname | 中等 | 46.10% |
SQL38 | 针对actor表创建视图actor_name_view | 中等 | 41.51% |
SQL39 | 针对上面的salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, | 中等 | 36.73% |
SQL40 | 在last_update后面新增加一列名字为create_date | 中等 | 40.10% |
SQL41 | 构造一个触发器audit_log,在向employees表中插入一条数据的时候,触发插入相关的数据到audit中 | 中等 | 34.98% |
SQL42 | 删除emp_no重复的记录,只保留最小的id对应的记录。 | 简单 | 37.36% |
SQL43 | 将所有to_date为9999-01-01的全部更新为NULL,且 | 简单 | 48.79% |
SQL44 | 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现。 | 简单 | 53.95% |
SQL45 | 将titles_test表名修改为titles_2017 | 简单 | 56.38% |
SQL46 | 在audit表上创建外键约束,其emp_no对应employees_test表的主键id | 中等 | 29.82% |
SQL48 | 将所有获取奖金的员工当前的薪水增加10% | 中等 | 36.53% |
SQL50 | 将employees表中的所有员工的last_name和first_name通过(')连接起来。 | 中等 | 45.44% |
SQL51 | 查找字符串'10,A,B' | 中等 | 56.48% |
SQL52 | 获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列 | 中等 | 56.22% |
SQL53 | 按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees | 中等 | 47.52% |
SQL54 | 查找排除当前最大、最小salary之后的员工的平均工资avg_salary | 中等 | 25.04% |
SQL55 | 分页查询employees表,每5行一页,返回第2页的数据 | 中等 | 67.02% |
SQL57 | 使用含有关键字exists查找未分配具体部门的员工的所有信息。 | 中等 | 36.93% |
SQL59 | 获取有奖金的员工相关信息。 | 较难 | 27.59% |
SQL60 | 统计salary的累计和running_total | 较难 | 34.98% |
SQL61 | 对于employees表中,给出奇数行的first_name | 较难 | 24.26% |
SQL62 | 出现三次以上相同积分的情况 | 简单 | 44.97% |
SQL63 | 刷题通过的题目排名 | 中等 | 31.00% |
SQL64 | 找到每个人的任务 | 简单 | 34.19% |
SQL65 | 异常的邮件概率 | 较难 | 19.09% |
SQL66 | 牛客每个人最近的登录日期(一) | 简单 | 40.84% |
SQL67 | 牛客每个人最近的登录日期(二) | 较难 | 20.59% |
SQL68 | 牛客每个人最近的登录日期(三) | 较难 | 21.97% |
SQL69 | 牛客每个人最近的登录日期(四) | 较难 | 22.81% |
SQL70 | 牛客每个人最近的登录日期(五) | 困难 | 13.33% |
SQL71 | 牛客每个人最近的登录日期(六) | 较难 | 24.44% |
SQL72 | 考试分数(一) | 简单 | 39.99% |
SQL73 | 考试分数(二) | 中等 | 28.60% |
SQL74 | 考试分数(三) | 较难 | 18.35% |
SQL75 | 考试分数(四) | 较难 | 25.52% |
SQL76 | 考试分数(五) | 困难 | 17.79% |
SQL77 | 牛客的课程订单分析(一) | 简单 | 33.28% |
SQL78 | 牛客的课程订单分析(二) | 中等 | 27.32% |
SQL79 | 牛客的课程订单分析(三) | 中等 | 20.97% |
SQL80 | 牛客的课程订单分析(四) | 较难 | 28.62% |
SQL81 | 牛客的课程订单分析(五) | 困难 | 17.00% |
SQL82 | 牛客的课程订单分析(六) | 中等 | 17.67% |
SQL83 | 牛客的课程订单分析(七) | 较难 | 18.84% |
SQL84 | 实习广场投递简历分析(一) | 简单 | 31.42% |
SQL85 | 实习广场投递简历分析(二) | 中等 | 26.33% |
SQL86 | 实习广场投递简历分析(三) | 困难 | 15.33% |
SQL87 | 最差是第几名(一) | 中等 | 45.00% |
SQL88 | 最差是第几名(二) | 较难 | 16.36% |