ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【算法】MySQL算法 [打印本页]

作者: 道家人    时间: 前天 19:21
标题: 【算法】MySQL算法
第二高薪水


本题求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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4