第二高薪水
本题求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对列名举行重命名。
部分工资前三高的所有员工
- select
- d.name 'Department', e1.name 'Employee',e1.salary
- from
- employee e1 join department d on e1.DepartmentId = d.id
- where
- 3 > (select
- count(distinct e2.salary)
- from
- Employee e2
- where
- e2.salary > e1.salary
- and e2.DepartmentId = e1.DepartmentId
- )
- ;
复制代码 实行的次序是:
1.employee表和department表按照条件举行内毗连。
2.举行子查询,从e1表中第一行开始,e1中的每一条记录都要和e2的所有记录比较,通过聚合函数筛选出e2表中有三条以下比e1大,则该e1满意条件。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |