博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【sql】第N高的薪水 Nth Highest Salary
阅读量:6796 次
发布时间:2019-06-26

本文共 1283 字,大约阅读时间需要 4 分钟。

  hot3.png

问题:

Write a SQL query to get the nth highest salary from the Employee table.

+----+--------+| Id | Salary |+----+--------+| 1  | 100    || 2  | 200    || 3  | 300    |+----+--------+

For example, given the above Employee table, the nth highest salary where n = 2 is 200. If there is no nth highest salary, then the query should return null.

+------------------------+| getNthHighestSalary(2) |+------------------------+| 200                    |+------------------------+

① 这道题是之前那道Second Highest Salary的拓展,根据之前那道题的做法,我们可以很容易的将其推展为N,根据对Second Highest Salary中①的分析,我们只需要将OFFSET后面的1改为N-1就行了,可以在前面加一个SET N = N - 1,将N先变成N-1。1019 ms

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT

BEGIN
  SET N = N - 1;
  RETURN (
      SELECT Salary FROM Employee
      GROUP BY Salary
      ORDER BY Salary DESC
      LIMIT 1
      OFFSET N
  );
END

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT

BEGIN
  SET N = N - 1;
  RETURN (
      SELECT DISTINCT Salary FROM Employee
      ORDER BY Salary DESC
      LIMIT 1
      OFFSET N
  );
END

② 根据对Second Highest Salary中④的分析,我们只需要将其1改为N-1即可。2278 ms

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT

BEGIN
  RETURN (
      SELECT MAX(e1.Salary) FROM Employee E1
      WHERE N - 1 =
      (SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2
        WHERE E2.Salary > E1.Salary)
  );
END

转载于:https://my.oschina.net/liyurong/blog/1570554

你可能感兴趣的文章
F5新型数据中心防火墙
查看>>
Exchange2010和2013共存后IMAP问题
查看>>
38 tomcat lb cluster、memcached和msm、msm及jvm虚拟机性能监控、tcpdump和nc工具的使用...
查看>>
Tomcat JVM优化一例
查看>>
给U盘加个回收站
查看>>
ifconfig
查看>>
Oracle 数据库归档满处理办法
查看>>
Linux双网卡绑定脚本
查看>>
udev控制磁盘引导顺序
查看>>
Linux下SCP拷贝文件
查看>>
Android消息机制(一)
查看>>
Lenovo Thinks Station E32 (I217-LM网卡) 安装ESXi 5.1
查看>>
阵列波导光栅
查看>>
我的友情链接
查看>>
如何把网页变成黑白
查看>>
中科恒伦入选安全牛,安全行业全景图
查看>>
Python:使用threading模块实现多线程编程四[使用Lock互斥锁]
查看>>
LVM磁盤管理PV/VG/LV常用命令參考手冊(附AIX命令對比)
查看>>
office工具栏内的图标字体变的很大很虚
查看>>
软件下载链接获取方法
查看>>