【算法】MySQL算法

打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

第二高薪水


本题求Employee表中的第二高的不同薪水,也就是说假如Employee表是:

则第二高的薪水是2000。
题目要求输出的格式是:

对应的sql语句:

该语句的实行次序:
1.从Eomployee表中选取所有行。
2.对salary列举行去重。
3.按照salary列的值举行降序排序。
4.从取第一行下面的一行记录。
由于子查询到的salary可能是空的,因此必要用到ifnull函数来处理结果为空的情况
ifnull(参数1,参数2)假如参数1不为空则返回参数1的值,否则返回参数2的值。
这里有一个细节点:就是我们要留意题目让我们输出的格式(列名格式),先看下面的sql语句。
  1. SELECT FIND_IN_SET('d','a,b,c,d') as `index`;
复制代码

find_in_set函数返回的值是4假如倒霉用as对列名重命名则结果是:

 因此我们要利用as对列名举行重命名。
 
部分工资前三高的所有员工


 
 
  1. select
  2.     d.name 'Department', e1.name 'Employee',e1.salary
  3. from
  4.     employee e1 join department d on e1.DepartmentId = d.id
  5. where
  6.     3 > (select
  7.             count(distinct e2.salary)
  8.         from
  9.             Employee e2
  10.         where
  11.             e2.salary > e1.salary
  12.                 and e2.DepartmentId = e1.DepartmentId
  13.         )
  14. ;
复制代码
 实行的次序是:
1.employee表和department表按照条件举行内毗连。
2.举行子查询,从e1表中第一行开始,e1中的每一条记录都要和e2的所有记录比较,通过聚合函数筛选出e2表中有三条以下比e1大,则该e1满意条件。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表