第二高薪水
本题求Employee表中的第二高的不同薪水,也就是说如果Employee表是:
则第二高的薪水是2000。
题目要求输出的格式是:
对应的sql语句:
该语句的执行顺序:
1.从Eomployee表中选取所有行。
2.对salary列进行去重。
3.按照salary列的值进行降序排序。
4.从取第一行下面的一行记录。
由于子查询到的salary可能是空的,因此需要用到ifnull函数来处理结果为空的情况
ifnull(参数1,参数2)如果参数1不为空则返回参数1的值,否则返回参数2的值。
这里有一个细节点:就是我们要注意题目让我们输出的格式(列名格式),先看下面的sql语句。
SELECT FIND_IN_SET('d','a,b,c,d') as `index`;
find_in_set函数返回的值是4如果不使用as对列名重命名则结果是:
因此我们要使用as对列名进行重命名。
部门工资前三高的所有员工
selectd.name 'Department', e1.name 'Employee',e1.salary
fromemployee e1 join department d on e1.DepartmentId = d.id
where3 > (selectcount(distinct e2.salary)fromEmployee e2wheree2.salary > e1.salaryand e2.DepartmentId = e1.DepartmentId)
;
执行的顺序是:
1.employee表和department表按照条件进行内连接。
2.进行子查询,从e1表中第一行开始,e1中的每一条记录都要和e2的所有记录比较,通过聚合函数筛选出e2表中有三条以下比e1大,则该e1满足条件。