176. Second Highest Salary

Problem: Write a SQL query to get the second highest salary from the Employee table. If there is no second highest salary, then the query should return null.

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

Note: consider all the possible situations! (1) 记录不存在 (2) 记录为NULL (3) 记录重复 

DISTINCT

select distinct job from emp; //查询结果集去重

LIMIT

1. limit startIndex,length

startIndex:表示记录查询起始位置,从0开始,与数组下标/索引(index)类似

length:表示查询的记录长度

select * from emp limit 1,3; //从第2条数据起,查询3条数据,即第2、3、4条数据
select * from emp limit 3; //默认startIndex=0,从第1条数据起,查询3条数据,即第1、2、3条数据

2. limit length offset startIndex

offset:表示偏移量,等同于startIndex

select * from emp limit 3 offset 1; //从第2条数据起,查询3条数据,即第2、3、4条数据

SELETE 

 当记录不存在时,即表中不存在该记录,查询结果集为Empty set

SELECT sal FROM emp ORDER BY sal LIMIT 14,1;
Empty set (0.00 sec)

 仅使用select一般用于显示数据或者赋值,当结果集为Empty set时,显示NULL

SELECT (SELECT sal FROM emp ORDER BY sal LIMIT 14,1) AS 15thSal;
+---------+
| 15thSal |
+---------+
|    NULL |
+---------+
1 row in set (0.00 sec)

当记录为NULL时 ,即表中存在该记录但没有值,查询结果集返回NULL

SELECT NULL;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

MAX() 分组函数自动忽略NULL

Solution

SELECT
    (SELECT DISTINCT Salary
     FROM Employee
     ORDER BY Salary DESC
     LIMIT 1,1) AS SecondHighestSalary;

sub-query: take this as a temp table 该条答案在情况(1)(2)(3)条件下待验证

SELECT MAX(Salary) AS SecondHighestSalary
FROM Employee
WHERE Salary<(SELECT MAX(Salary) FROM Employee);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值