一、查找最晚入职员工的所有信息
描述
有一个员工employees表简况如下:
请你查找employees里最晚入职员工的所有信息,以上例子输出如下:
最优解法
select * from employees
where hire_date = (select max(hire_date) from employees);当然会有order by排序后,用limit获取第一个元素,但这必须要在没有相同数据的情况下才可以
学习:select 后要查询出聚合函数+字段时需要注意的点(group by+聚合函数)
聚合函数经常是搭配group by一起出现的
1、单纯用max——————合法
select max(hire_date) from employees
2、多查询一个字段————此时没用group by所以不合法
select max(hire_date),emp_no from employees
3、加上group by———仍然不合法,此时emp_no不是group by后进行分组的last_name字段
select max(hire_date),emp_no from employees group by last_nameselect * from employees group by last_name(此时也是前后不对应)
4、根据emp_no进行分组—————————合法
select max(hire_date),emp_no from employees group by emp_no总结:
1、如果select后面要查的是聚合函数+字段,此时必须要有group by。
2、而用到group by,那么你select的字段只能是进行分组的字段3、group by id(id是主键)的时候,select什么都没有问题,包括有聚合函数。即下面的sql是合法的,但需要注意不能用 *。
简单总结就是聚合函数里的字段不受控制,而直接查询的字段受控制(分group by的是主键还是其他,如果是主键则不受影响,非主键则要和group by后的字段一致)
select max(hire_date),emp_no,last_name,first_name from employees group by emp_no
//https://blog.csdn.net/qq_48759664/article/details/120436050
二、SQL2 查找入职员工时间排名倒数第三的员工所有信息
描述
有一个员工employees表简况如下:
请你查找employees里入职员工时间排名倒数第三的员工所有信息,以上例子输出如下:
注意:可能会存在同一个日期入职的员工,所以入职员工时间排名倒数第三的员工可能不止一个。
注意:该题需要注意数据可能是这样的:
注意:此时倒数第一、二数据是重复的,所以我们真正要找的倒数第三是1989-09-12,此时就要用到DISTINCT进行去重,去完重后在用limit获取第三个元素。(先去重再limit的)
最终sql:
select * from employees where hire_date =
(select DISTINCT hire_date from employees order by hire_date desc LIMIT 2,1)
该题主要考察:DISTINCT+limit+降序
三、SQL3 查找当前薪水详情以及部门编号dept_no
该题比较简单,主要考察联表
查找当前薪水详情以及部门编号dept_no_牛客题霸_牛客网
select salaries.*,dept_manager.dept_no
from salaries RIGHT join dept_manager
on salaries.emp_no = dept_manager.emp_no
order by salaries.emp_no
四、
aa