第二高的薪水(排序问题)

176. 第二高的薪水

难度简单

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

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

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+


思考: 显然,这是一个排序问题!!

sql语句的问题,就是不存在第二高的薪水时,没有返回null,怎么返回呢?
select Salary as SecondHighestSalary from Employee order by Salary desc limit 1,1 

 正确的代码:

select (select distinct Salary from Employee order by Salary desc limit 1,1)  as SecondHighestSalary

注意一下几点:

  1) 如果值不存在怎么返回null,  select null 返回null

  2)   distinct的作用,如果没有distinct那么sql语句是错误的,因为可能会有多个相同的薪水都是第一高,那么输出就会报错。

    distinct的作用: 一般用 distinct来查询某个字段不重复的记录数,distinct要放在字段的开头。只会得到不重复的某个字段,

      好好体会一下distinct 和 group by的区别!!!! ( distinct 只是得到某个字段,group by  得到的是整条记录 )

 此外,desc表示的是降序排序, asc是升序排序     limit  1,1   limit表示从第几位开始(从0开始),取多少个数。

参考文档:

  distinct:    https://www.cnblogs.com/shiluoliming/p/6604407.html

 



posted @ 2020-08-15 17:14  你眼里的星辰  阅读(168)  评论(0)    收藏  举报